Mám tato dvě pole:jedno je vyplněno informacemi z požadavku ajax a další ukládá tlačítka, na která uživatel klikne. Používám tento kód (vyplnil jsem ukázková čísla):
var array1 = [2, 4]; var array2 = [4, 2]; //It cames from the user button clicks, so it might be disordered. array1.sort(); //Sorts both Ajax and user info. array2.sort(); if (array1==array2) { doSomething(); }else{ doAnotherThing(); }
Ale vždy dává false
, i když jsou dvě pole stejná, ale s jiným názvem. (Zkontroloval jsem to v konzole JS v prohlížeči Chrome). Existuje tedy nějaký způsob, jak bych mohl vědět, zda tato dvě pole obsahují totéž? Proč dává false
? Jak mohu vědět, které hodnoty v prvním poli nejsou ve druhém?
Odpověď
Seřaďte pole a porovnejte jejich hodnoty jednu po druhé.
function arrayCompare(_arr1, _arr2) { if ( !Array.isArray(_arr1) || !Array.isArray(_arr2) || _arr1.length !== _arr2.length ) { return false; } // .concat() to not mutate arguments const arr1 = _arr1.concat().sort(); const arr2 = _arr2.concat().sort(); for (let i = 0; i < arr1.length; i++) { if (arr1[i] !== arr2[i]) { return false; } } return true; }