Mam dwie tablice obiektów, może zawierać kolejną tablicę obiektów, jak mogę iterować dwa tablicy i porównać ze sobą ???

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']];

oczekiwany wynik:

Array B=['parent1',['child1',['child2',['child3',[],'value3'],'value2'],'value1']];

Różnica między tymi dwoma tablicami jest tablica B. Nazwa dziecka2 jest null, więc chcę porównać z dwoma tablicami i jeśli nazwa jest null, a następnie skopiuj nazwę z pierwszej tablicy ..

Jak możemy iterować dwie tablice jednocześnie, co może obejmować tablice tablicowe.

Uwaga: Czasami moja tablica zawiera N Liczbę dzieci,

Myślę, że możemy zrobić z funkcją rekurencyjnej, ale jak możemy iterować poziom tablic?

Próbowałem wielu pętli, a pętle foreach nie działa dla mnie

1
Jackson mj 21 luty 2019, 15:20

2 odpowiedzi

Najlepsza odpowiedź

Możesz wziąć oba tablicę do funkcji, która zmienia elementy i wygląda do tablic, a następnie ponownie wywołaj tę funkcję lub sprawdzić wartość i jeśli inny, a następnie zaktualizuj tablicę.

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
Nina Scholz 21 luty 2019, 12:29

To jest rozwiązanie javascript. Może to pomóc:

    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];
            }
       }
    }
0
RK_15 21 luty 2019, 12:29