我有2个对象数组 第一个数组
[ { value: 'Node 1', id: 1, childs: [ { value: 'Node 2', id : 2, childs: [ { value: 'Node 3', id: 3 }, { value: 'Node 4', id: 4 } ] } ] } ]
和第二个数组
[ { value: 'Node 1', id: 1, childs: [ { value: 'Node 5', id : 5 } ] } ]
我不明白如何在树形结构中连接这些对象数组。 我需要这个结果
[ { value: 'Node 1', id: 1, childs: [ { value: 'Node 2', id : 2, childs: [ { value: 'Node 3', id: 3 }, { value: 'Node 4', id: 4 } ] }, { value: 'Node 5', id : 5 } ] } ]
并且这些数组可能更难以拥有更多的孩子。
我怎样才能得到我想要的东西?
答案 0 :(得分:1)
试试这个Array#forEach
函数和Array#filter
var arr = [ { value: 'Node 1', id: 1, childs: [ { value: 'Node 2', id : 2, childs: [ { value: 'Node 3', id: 3 }, { value: 'Node 4', id: 4
} ] } ] } ];
var arr2= [ { value: 'Node 1', id: 1, childs: [ { value: 'Node 5', id : 5 } ] } ]
arr.forEach(function(a){
var k =arr2.filter(i=> a.value == i.value);
a.childs.push(...k[0].childs)
})
console.log(arr)
答案 1 :(得分:1)
您可以通过散列实际级别的id来使用迭代和递归方法。
function update(target, source) {
var hash = Object.create(null);
target.forEach(function (o) {
hash[o.id] = o;
});
source.forEach(function (o, i, a) {
if (hash[o.id]) {
o.children && update(hash[o.id].children = hash[o.id].children || [], o.children)
} else {
target.push(o);
}
});
}
var array1 = [{ value: 'Node 1', id: 1, children: [{ value: 'Node 2', id: 2, children: [{ value: 'Node 3', id: 3 }, { value: 'Node 4', id: 4 }] }] }],
array2 = [{ value: 'Node 1', id: 1, children: [{ value: 'Node 5', id: 5 }] }];
update(array1, array2);
console.log(array1);

.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 2 :(得分:0)
您正在寻找concat()
方法。 See this.
所以你的代码应该是这样的:
array1[0].children.concat(array2[0].children);