问题描述
我有两个对象数组,它可能包含另一个对象数组,我如何迭代两个数组并相互比较?
interface items {
name:string;
subItems:items[];
value:string;
}
Array A=['parent1',['child1',['child2',['child3',[],'value3'],'value2'],'value1']];
Array B=['parent1',['child1',[null,['child3',[],'value3'],'value2'],'value1']];
预期结果 :
Array B=['parent1',['child1',['child2',['child3',[],'value3'],'value2'],'value1']];
这两个数组之间的区别是数组B child2名称为null,所以我想与两个数组进行比较,如果name为null,则从第一个数组复制名称。
我们如何同时迭代可能包含子数组的两个数组。
注意:有时我的阵列包含N个孩子,
我认为我们可以使用递归函数,但如何迭代数组的级别?
我尝试了多个for和forEach循环对我不起作用
1楼
RK_15
0
2019-02-21 12:29:41
这是Javascript解决方案。 可能可以这样:
function recursion(arr1,arr2){
for(let index = 0; (arr1.length>index && arr2.length>index);index++){
if(Array.isArray(arr1[index]) && Array.isArray(arr2[index])){
recursion(arr1[index],arr2[index]);
}else if(arr1[index] !== arr2[index]){
arr1[index] = arr2[index];
}
}
}
2楼
Nina Scholz
0
已采纳
2019-02-21 12:29:47
您可以将两个数组都放入一个函数中,该函数迭代元素并查找数组,然后再次调用此函数或检查值,如果值不同,则更新数组。
function compareAndUpdate(a, b) { a.forEach((v, i) => { if (Array.isArray(v)) return compareAndUpdate(v, b[i]); if (b[i] !== v) b[i] = v; }); } var a = ['parent1', ['child1', ['child2', ['child3', [], 'value3'], 'value2'], 'value1']], b = ['parent1', ['child1', [null, ['child3', [], 'value3'], 'value2'], 'value1']]; compareAndUpdate(a, b); console.log(b);
.as-console-wrapper { max-height: 100% !important; top: 0; }