jQuery.extend()
有助于以下列方式合并对象:
var a = {
'x': 2,
'y': 3,
'etc': {
'm': 3,
'n': 5
}
};
var b = {
'x': 4,
'z': 1,
'etc': {
'm': 2,
'p': 3
}
};
$.extend(true, a, b); // true for recursively merge
/* Result:
a = {
'x': 4,
'y': 3,
'z': 1,
'etc': {
'm': 2,
'n': 5,
'p': 5
}
};
*/
但我感兴趣的只是a
中已存在的属性,例如,如果z
不是a
的属性,则不应该在结果中。所以预期的结果应该是:
a = {
'x': 4,
'y': 3,
'etc': {
'm': 2,
'n': 5,
}
};
我想知道是否有一种简单的方法可以通过jQuery实现这一点,或者只能使用像这样的强力实现(在a
最多有2层的条件下):
for (var i in b) {
if (a.hasOwnProperty(i)) {
if (typeof a[i] === 'object') {
for (var j in b[i]) {
if (a[i].hasOwnProperty(j)) {
a[i][j] = b[i][j];
}
}
} else {
a[i] = b[i];
}
}
}
答案 0 :(得分:0)
我不知道这样的函数,但是我写了一个泛型函数,它将合并两个对象(散列)宽度任意数量的层。
//The function
function leftMerge(a, b) {
for (var i in b) {
if (a.hasOwnProperty(i)) {
console.log(typeof a[i]);
if (typeof a[i] == 'object' && typeof b[i]== 'object')
leftMerge(a[i], b[i]);
else
a[i] = b[i]
}
}
}
// a test
var obj_a = {
'x': 2,
'y': 3,
'etc': {
'm': 3,
'n': 5,
'j': {
'h': 15,
'i':16
}
}
};
var obj_b = {
'x': 4,
'z': 1,
'etc': {
'm': 2,
'p': 3,
'j': {
'i':2,
'l':22
}
}
};
leftMerge(obj_a, obj_b);
console.log(obj_a);
我希望有所帮助。