当且仅当目标字段存在时,javascript中有没有办法将对象中命名字段的值分配给另一个对象的相同字段。即覆盖旧值,不添加新值,使用 ideomatic 构造,单行(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"
...
}
没有 field1 和 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 次操作/秒