/ / Jak porównać wiele tablic i zwrócić tablicę z unikalnymi wartościami w javascript? - javascript, tablice

Jak porównać wiele tablic i zwrócić tablicę z unikalnymi wartościami w javascript? - javascript, tablice

Chciałbym porównać wiele tablic i wreszcie mieć tablicę, która zawiera wszystkie unikalne wartości z innej tablicy. Starałem się:

1, Użyj metody filtrowania, aby porównać różnicę między 2 tablicami

2, Wywołaj pętlę for, aby wprowadzić tablice do metody filtrowania

a kod jest następujący

function diffArray(arr1, arr2) {
function filterfunction (arr1, arr2) {
return arr1.filter(function(item) {
return arr2.indexOf(item) === -1;
});
}
return filterfunction (arr1,arr2).concat(filterfunction(arr2,arr1));
}

function extractArray() {
var args = Array.prototype.slice.call(arguments);
for (var i =0; i < args.length; i++) {
diffArray(args[i],args[i+1]);
}
}

extractArray([3, 3, 3, 2, 5], [2, 1, 5, 7], [3, 4, 6, 6], [1, 2, 3]);

Jednak to nie działa i zwraca komunikat o błędzie „Nie można odczytać właściwości„ indexOf ”niedokładnego„ .... Co jest nie tak z logiką i co powinienem zmienić, aby działała?

Bardzo dziękuję za pomoc z góry!

Re: Dla wszystkich, którzy zaznaczają ten problem jako zduplikowany ... to, czego szukam, to rozwiązanie, które pozwala mi umieścić tyle tablic, ile chcę dla danych wejściowych i zmniejszyć całą różnicę (np. dane wejściowe 10000 tablic i zwrócić 1 tablicę dla unikalnej wartości), ale nie tylko porównanie 2 tablic .. Rozwiązania, które widziałem, zawsze dotyczą tylko 2 tablic.

Odpowiedzi:

0 dla odpowiedzi № 1

Nie używam filtrów ani niczego w tym rodzaju, ale wykona to zadanie. Najpierw tworzę pustą tablicę i concat następna tablica. Następnie przekazuję go, aby usunąć duplikaty i zwracam nowo „przefiltrowaną” tablicę z powrotem do użycia.

function deleteDuplicates(a){
for(var i = a.length - 1; i >= 0; i--){
if(a.indexOf(a[i]) !== i){
a.splice(i, 1);
}
}
return a;
}

function extractArray() {
var args = Array.prototype.slice.call(arguments), arr = [];

for (var i = 0; i < args.length; i++) {
arr = deleteDuplicates(arr.concat(args[i]));
}

return arr;
}

var arr = extractArray([3, 3, 3, 2, 5], [2, 1, 5, 7], [3, 4, 6, 6], [1, 2, 3]);

console.log(arr) //[3, 2, 5, 1, 7, 4, 6]