Resumen
En este post te voy a mostrar a sacar la diferencia entre dos arreglos de JavaScript. Es decir, obtener los elementos que existen en un arreglo A pero no existen en otro arreglo B.
La función que te voy a mostrar va a regresar un nuevo arreglo que tiene los elementos que hay en A
pero no en B
.
La función que obtiene la diferencia de arreglos
Veamos la siguiente función. En la misma hacemos un filter
al arreglo 1
, esto es para filtrar los elementos y crear un nuevo arreglo en donde no estén presentes los del arreglo 2
.
Para saber si un elemento está dentro de un arreglo usamos indexOf o findIndex si fuera necesario.
Vamos avanzando poco a poco. Recordemos que filter
va a ignorar el elemento (es decir, lo dejará fuera del nuevo arreglo) si lo que se regrese dentro de la función es false
.
Dentro de la función regresamos lo que regrese la siguiente comparación:
arr2.indexOf(elemento) == -1
Ya que indexOf
regresa -1
si el elemento no existe.
De esta manera obtenemos los elementos que existen en arr1
pero no en arr2
.
Uso de la función
Simplemente invoca a la función con ambos arreglos. Si quieres obtener lo que hay en B
pero no en A
simplemente invierte los argumentos.
Es decir, en lugar de:
let diferencia = diferenciaDeArreglos(A, B);
Mejor haz un:
let diferencia = diferenciaDeArreglos(B, A);
Recuerda que la función regresa un nuevo arreglo.
Ejemplo
Vamos a ver un ejemplo.
Que quede claro que no soy un experto de videojuegos pero para este ejemplo vamos a suponer que lo que digo es cierto (ya que creo que Luigi sí aparece como personaje en Mario Bros 3 cuando se juega en parejas)
La función devuelve un nuevo arreglo que tiene los elementos que están en arr1
pero no en arr2
.
Puedes probar el ejemplo aquí.
Extendiendo la función
Si quieres usar arreglos de objetos, o cosas más complejas, simplemente asegúrate de buscar el índice.
Recomiendo usar findIndex cuando no tenemos arreglos de datos primitivos.