Cómo comparar matrices en JavaScript, con ejemplos

Este artículo le mostrará cómo comparar matrices en JavaScript y proporciona algunas funciones listas para usar para hacerlo.

Ya hemos cubierto un poco sobre cómo usar arreglos en JavaScript:

  • Recorriendo Array usando JavaScript forEach(), con ejemplos
  • Método Array slice() en JavaScript, con ejemplos()
  • Comprobar que la matriz contiene un valor en JavaScript, con ejemplos
  • Eliminar un elemento de una matriz en JavaScript, con ejemplos

¿Qué es una matriz?

Una matriz es un tipo de variable de JavaScript que puede contener otras variables, o referencias a otras variables, en una lista en una posición determinada.

Comparación de matrices en JavaScript

Como los elementos de una matriz tienen un valor y un índice (o puesto), tendrá que decidir cómo desea compararlos. Aquí están las opciones con ejemplos de código.

Comprobar si las matrices contienen los mismos valores, independientemente del orden

Tenga en cuenta que esto no funcionará bien si hay valores duplicados en la matriz:solo se puede comparar la presencia de un valor en cada matriz, no cuántas veces aparece, ya que no se verifica la posición de cada elemento.

La siguiente función comprobará si dos matrices contienen los mismos valores, independientemente de la frecuencia o la posición.

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);
}

Esta función devolverá VERDADERO si las matrices contienen los mismos valores o FALSO si no los tienen.

Comprobar si las matrices contienen los mismos valores, en el mismo orden

La siguiente función compara las matrices directamente; deben ser completamente idénticas:

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);
}

Esta función devolverá VERDADERO si las matrices son exactamente iguales o FALSO si no lo son.

Encontrar valores en una matriz que no están en otra

Las versiones modernas de JavaScript desde el lanzamiento de ECMA2015 (que ahora debería ser ampliamente compatible) brindan funciones para filtrar fácilmente las matrices para encontrar diferencias entre ellas.

El siguiente ejemplo tomará los elementos en matriz1 que no están en matriz2 y crear nuevas diferencias arreglo con ellos.

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

¿Cómo funciona esto?

matriz1 se está filtrando para incluir solo valores que no aparecen en matriz2 . Si un valor aparece en matriz2 está determinado por si tiene un índice válido (un índice mayor que 0 o no).