我有2个对象 a 和 b ,它们都包含数组。 我想合并每个对象中存在的数组,并形成一个新对象,包括数组和文本节点。
我的代码: -
var a = {
name1:[1,2],
name2:[3],
name3:'alisha',
name4:'japan'
};
var b = {
name1:[4],
name2:[5,6],
name3:'hello alisha!!'
};
newobject = function (obj1, obj2) {
var obj3 = {};
for (var attrname in obj1) {
obj3[attrname] = obj1[attrname];
}
for (var attrname in obj2) {
obj3[attrname] = obj2[attrname];
}
return obj3;
};
console.log(newobject(a,b))
我想做什么: -
我有2个对象 a & b ,可能包含不同的数据以及类似的数据。如果两个对象具有相同的属性,我想混合数组中的数据。如果对象的属性是一个字符串,我想用** b **对象相同的属性更新它。
输出可能不准确,但它提供了100%的提示来解决此问题
输出我想要: -
{
name1:[1,2,4],
name2:[3,5,6],
name3:'hello alisha!',
name4:'japan'
}
请不要使用jquery
答案 0 :(得分:2)
如果它确实是您要合并的上述示例,那么以下内容将为您完成。
我不知道您的情况是否重要,但您可能还想考虑处理a.name1
为string
且b.name1
为{{1}的情况等等。
array

答案 1 :(得分:1)
您也可以轻松扩展以检查其他类型,例如object
等。
var a = {
name1:[1,2],
name2:[3],
name3:'alisha',
name4:'japan'
};
var b = {
name1:[4],
name2:[5,6],
name3:'hello alisha!!',
name5:'new name'
};
function merge(a, b) {
var c = Object.keys(a).reduce(function(acc, key) {
if(!(key in b)) {
acc[key] = a[key]
} else if(Array.isArray(a[key]) && Array.isArray(b[key])) {
acc[key] = a[key].concat(b[key])
} else {
acc[key] = b[key]
}
return acc
}, {})
c = Object.keys(b).reduce(function(acc, key) {
if(!(key in acc)) {
acc[key] = b[key]
}
return acc
}, c)
return c
}
var d = merge(a, b)
答案 2 :(得分:1)
var a = {
name1: [1, 2],
name2: [3],
name3: 'alisha',
name4: 'japan'
};
var b = {
name1: [4],
name2: [5, 6],
name3: 'hello alisha!!'
};
function mergeObjects(a, b) {
for (var key in b) {
a[key] = (Array.isArray(a[key])) ? a[key].concat(b[key]) : b[key];
}
return a;
}
console.log(mergeObjects(a, b));