我想加入具有类似键的嵌套对象:
var obj1 = {
id: 1,
styles: {
background: "white"
}
};
var obj2 = {
id: 2,
styles: {
border: "1px solid #ccc"
}
};
var merged = merge(obj1, obj2);
// desired outcome
merged = {
id: 2,
styles: {
background: "white",
border: "1px solid #ccc"
}
}
jQuery的扩展方法和我见过的类似的方法永远不会连接对象属性,这正是我正在寻找的。除了自己构建这个方法之外,我希望并且非常肯定已经有了解决方案..
答案 0 :(得分:1)
jQuery.extend做你想要的。
var obj1 = {
id: 1,
styles: {
background: "white"
}
};
var obj2 = {
id: 2,
styles: {
border: "1px solid #ccc"
}
};
var merged = jQuery.extend(true, obj1, obj2);
// desired outcome
console.log(merged);
console.log({
id: 2,
styles: {
background: "white",
border: "1px solid #ccc"
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
答案 1 :(得分:0)
这是我编写的一个简单的方法,可以很好地完成这个操作,并且不需要您为此功能导入一个巨大的库。
function extend(obj /* , ...source */) {
for (var i = 1; i < arguments.length; i++) {
for (var key in arguments[i]) {
if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {
obj[key] = (typeof arguments[i][key] === 'object' ? extend(obj[key], arguments[i][key]) : arguments[i][key]);
}
}
}
return obj;
}