ターゲットフィールドが存在する場合にのみ、オブジェクト内の名前付きフィールドの値を別のオブジェクトの同じフィールドに割り当てる方法はJavaScriptにありますか? つまり、古い値を上書きし、新しい値を追加するのではなく、観念的な構造、ワンライナー (javascript および/または jQuery に特有) を使用し、for-in であっても決してループしません。
var theSource = {
field1: "TEXT",
field2: "VAL",
field3: "ZZ",
field4: "4",
field5: "5"
},
theTarget = {
field2: "0",
field3: "",
field4: null,
field5: undefined
};
何かのようなもの
var result = jQuery.overwriteOnlyExisting(theTarget, theSource);
result === {
field2: "VAL"
field3: "ZZ"
...
}
NO field1 AND field3 の後の古いフィールドは保持されます。
jQuery.extend
- 値を上書きできますが、新しいフィールドもコピーします。
ここにはどのオプションがありますか?
http://jsbin.com/owivat/1/edit (アンダースコア) - 私はこれが好きです。今度は jquery の方法を見つけます。
結果:
_.extend(theTarget, _(theSource).pick(_(theTarget).keys()));
142,850 オペレーション/秒
Object.keys(theTarget).map(function(a) { if (a in theSource) theTarget[a] = theSource[a]; });
403,243 オペレーション/秒