Jak porovnávat pole v JavaScriptu s příklady

Tento článek vám ukáže, jak porovnávat pole v JavaScriptu, a poskytuje k tomu několik funkcí připravených k použití.

Už jsme se trochu zabývali tím, jak používat pole v JavaScriptu:

  • Opakování přes pole pomocí JavaScriptu forEach() s příklady
  • Metoda pole slice() v JavaScriptu s příklady()
  • Kontrola pole obsahuje hodnotu v JavaScriptu s příklady
  • Odebrání prvku z pole v JavaScriptu s příklady

Co je pole?

Pole je typ proměnné JavaScriptu, která může obsahovat další proměnné nebo odkazy na jiné proměnné v seznamu na určité pozici.

Porovnání polí v JavaScriptu

Protože prvky v poli mají obě hodnotuindex (nebo pozici), budete se muset rozhodnout jak chcete je porovnat. Zde jsou možnosti s příklady kódu.

Kontrola, zda pole obsahují stejné hodnoty, bez ohledu na pořadí

Uvědomte si, že to nebude fungovat dobře, pokud jsou v poli duplicitní hodnoty – lze porovnávat pouze přítomnost hodnoty v každém poli, nikoli to, kolikrát se objeví, protože pozice každého prvku není kontrolována.

Následující funkce zkontroluje, zda dvě pole obsahují stejné hodnoty bez ohledu na frekvenci nebo polohu.

function compareArrayValues(array1, array2){
    
    # Get only the unique values in each array
    # This uses the new ES6 Set feature - a Set contains only unique values, so by converting an array to a Set and back, only the unique values are kept
    # the ellipsis (...) expands the values of the Set, which is faster to type than a foreach loop to add each value to the array
    array1 = [...new Set(array1)];
    array2 = [...new Set(array2)];

    # Sort the arrays so the values are in order and can be compared:
    array1.sort();
    array2.sort();

    # The arrays can now be compared directly.  A cheeky shortcut to do this is to convert them to a JSON string and compare those - if the strings match, the arrays are the same
    # This is again much faster than iterating through the array and comparing each value
    return JSON.stringify(array1) === JSON.stringify(array2);
}

Tato funkce vrátí TRUE, pokud pole obsahují stejné hodnoty, nebo FALSE, pokud ne.

Kontrola, zda pole obsahují stejné hodnoty ve stejném pořadí

Následující funkce porovnává pole přímo – musí být zcela identická:

function compareArrays(array1, array2){
    
    # The arrays can be compared as-is as we want both the value and position of each element to be checked.  A cheeky shortcut to do this is to convert them to a JSON string and compare those - if the strings match, the arrays are the same
    # This is much faster than iterating through the array and comparing each value
    return JSON.stringify(array1) === JSON.stringify(array2);
}

Tato funkce vrátí TRUE, pokud jsou pole přesně stejná, nebo FALSE, pokud nejsou.

Hledání hodnot v poli, které nejsou v jiném

Moderní verze JavaScriptu od vydání ECMA2015 (který by měl být nyní široce podporován) poskytují funkce pro snadné filtrování polí za účelem nalezení rozdílů mezi nimi.

Níže uvedený příklad použije prvky v pole1 které nejsou v pole2 a vytvořte nové rozdíly pole s nimi.

var differences = array1.filter(e => array2.indexOf(e) < 0);

Jak to funguje?

pole1 je filtrováno tak, aby zahrnovalo pouze hodnoty, které se nezobrazují v pole2 . Zda se hodnota zobrazuje v pole2 je určeno tím, zda má platný index (index větší než 0 nebo ne).