итерация двух рекурсивных массивов [элемент массива содержит другой массив] одновременно в javascript - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть два массива объектов, он может содержать другой массив объектов, как я могу выполнить итерацию с двумя массивами и сравнить друг с другом ???

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 name имеет значение null, поэтому я хочу сравнить его с двумя массивами, и если name is null, скопируйте имя из первого массива ..

как мы можем повторять два массива одновременно, которые могут содержать вложенные массивы.

примечание: иногда мой массив содержит N КОЛИЧЕСТВО ДЕТЕЙ,

я думаю, что мы можем делать с рекурсивной функцией, но как мы можем выполнять итерацииуровень массивов?

я пробовал несколько циклов for и forEach, это не работает для меня

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Вы можете взять оба массива в функцию, которая выполняет итерацию элементов и ищет либо массивы, затем снова вызвать эту функцию или проверить значение и, если он отличается, затем обновить массив.

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; }
0 голосов
/ 21 февраля 2019

Это решение 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];
            }
       }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...