javascript - Porównaj elementy dwóch tablic
Mam dwie tablice w JavaScript i muszę je porównać. Na przykład, załóżmy, że mam te dwie tablice:
var array1 = ["1", "2", "3", "4"];
var array2 = ["4", "1", "3", "2"];
Te tablice są faktycznie równe i chcę otrzymać true jako wynik porównania. Jaki jest najlepszy i najszybszy sposób, aby to zrobić?
Odpowiedź #1
To, co naprawdę masz, to dwa zbiory, nie tablice, ale niestety JavaScript nie udostępnia żadnego rodzaju typu danych „zbiór”. Najłatwiejszy sposób, aby wykonać tego rodzaju sprawdzenie, to użycie jakiejś biblioteki funkcyjnej JavaScript, takiej jak lodash.
Użycie funkcji _.union z lodasha sprawia, że jest to wyjątkowo proste.
function setsEqual(a, b) {
var u = _.union(a, b);
return u.length === a.length && u.length === b.length;
}
Jeśli chcesz to zrobić bez zewnętrznych bibliotek, możesz to zrobić za pomocą Array.prototype.every.
function setsEqual(a, b) {
return a.length === b.length
&& a.every(function (v) { return b.indexOf(v) !== -1; });
}
Odpowiedź #2
Najlepszym i najszybszym sposobem, aby to zrobić, jest użycie obiektu, który śledzi wartość i jej liczbę. Następnie możemy sprawdzić, czy istnieje w drugiej tablicy. Spróbuj tego.
function compare(arr1, arr2){
var obj={}, len = arr1.length, i=0, isSame=true, prop;
if(arr1.length === arr2.length){
for(;i<len;i++){
if(obj[arr1[i]]){
obj[arr1[i]] = obj[arr1[i]]+1;
} else{
obj[arr1[i]] =1;
}
}
i=0, len = arr2.length;
for(;i<len;i++){
if(obj[arr2[i]]){
obj[arr2[i]] = obj[arr2[i]]-1;
} else{
isSame = false;
break;
}
}
for (prop in obj){
if(obj[prop] > 0){
isSame = false;
break;
}
}
}else{
isSame = false;
}
return isSame;
}
