当前位置: 代码迷 >> JavaScript >> 在javascript中同时迭代两个递归数组[数组项包含另一个数组]
  详细解决方案

在javascript中同时迭代两个递归数组[数组项包含另一个数组]

热度:58   发布时间:2023-06-05 09:35:45.0

我有两个对象数组,它可能包含另一个对象数组,我如何迭代两个数组并相互比较?

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循环对我不起作用

这是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];
            }
       }
    }

您可以将两个数组都放入一个函数中,该函数迭代元素并查找数组,然后再次调用此函数或检查值,如果值不同,则更新数组。

 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; } 

  相关解决方案