【发布时间】:2013-06-27 08:10:30
【问题描述】:
javascript中有没有办法 当且仅当目标字段存在时,将对象中命名字段的值分配给另一个对象的相同字段。 IE。覆盖旧值,不添加新值,使用 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"
...
}
保留字段 1 和字段 3 之后的旧字段。
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 次操作/秒
【问题讨论】:
-
为什么...而且绝不会循环,即使是for-in?
-
你应该使用underscorejs.org/#each和backbonejs.org/#Model-has。基本上它是源上的 for-in 循环和目标上的 object.hasOwnProperty。
-
@inf3rno 很高兴知道,但坚持使用 jQuery :)
-
只有标准的js我们可以做到:Object.keys(theTarget).map(function(a){ if(theSource[a]) theTarget[a]=theSource[a]})跨度>
-
jquery 只是用于 DOM 操作,所以你不会用 jquery 来做这件事......顺便说一句,使用标准 javascript 是一件容易的事......
标签: javascript jquery object