我有两个对象文字:
var animal = {
eat: function() {
console.log("eating...");
}
}
var dog = {
eat: "this has to be replaced when merged",
nrOfLegs: 4
}
Run Code Online (Sandbox Code Playgroud)
需要这样的合并功能:
dog = someMergingFunction(animal, dog);
Run Code Online (Sandbox Code Playgroud)
这产生:
{
eat: function() {
console.log("eating...");
},
nrOfLegs: 4
}
Run Code Online (Sandbox Code Playgroud)
其中一个对象文字必须替换相同的属性.
我如何在Javascript中执行此操作?
cas*_*nca 12
以下应该有效:
function merge(obj1, obj2) {
var obj = {};
for (var x in obj1)
if (obj1.hasOwnProperty(x))
obj[x] = obj1[x];
for (var x in obj2)
if (obj2.hasOwnProperty(x))
obj[x] = obj2[x];
return obj;
}
Run Code Online (Sandbox Code Playgroud)
如果两个对象具有相同的属性,则值obj2优先.
我强烈推荐使用jQuery的extend方法,因为它将提供完整的浏览器支持.
var object = $.extend({}, object1, object2, ..., objectN);
Run Code Online (Sandbox Code Playgroud)
请记住,第一个参数是目标.关于extend的使用的好处是,通过以下代码,您可以使其递归扩展:
var object = $.extend(object, object1, object2, ..., objectN);
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅jQuery的文档:用于Extend方法的jQuery Docs
// usage merged = someMergingFunction(a, b, c, d, ...)
// keys in earlier args override keys in later args.
// someMergingFunction({foo:"bar"}, {foo:"baz"})
// ==> {foo:"bar"}
function someMergingFunction () {
var o = {}
for (var i = arguments.length - 1; i >= 0; i --) {
var s = arguments[i]
for (var k in s) o[k] = s[k]
}
return o
}
Run Code Online (Sandbox Code Playgroud)
扩展语法怎么样?
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax
var obj1 = { foo: 'bar', x: 42 };
var obj2 = { foo: 'baz', y: 13 };
var clonedObj = { ...obj1 };
// Object { foo: "bar", x: 42 }
var mergedObj = { ...obj1, ...obj2 };
// Object { foo: "baz", x: 42, y: 13 }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7523 次 |
| 最近记录: |