Compara arrays en JavaScript
Esta publicación discutirá cómo comparar arrays en JavaScript. Se dice que dos arrays son iguales si tienen los mismos elementos en el mismo orden. La solución debería funcionar para arrays anidados de cualquier profundidad.
Por ejemplo, la array [1, 2, [3, [4, 5]]]
es igual a la array [1, 2, [3, [4, 5]]]
mientras que es diferente de la array [1, 2, [3, 4, 5]]
.
1. Uso de la biblioteca de guiones bajos/Lodash
Si ya está usando la biblioteca de guiones bajos o Lodash, considere usar el _.isEqual
método para probar la igualdad de arrays. Realiza una comparación profunda entre valores especificados y también funciona para arrays anidadas.
1 2 3 4 5 6 7 8 9 10 11 |
var _ = require('underscore'); // o lodash var first = [ 1, 2, [3, 4, 5] ]; var second = [ 1, 2, [3, 4, 5] ]; var isEqual = _.isEqual(first, second); console.log(isEqual); /* Resultado: true */ |
2. Usando JSON.stringify()
función
Otra solución es convertir ambas arrays en una string JSON y comparar su representación de string entre sí para determinar la igualdad. Para convertir la arrays en una string JSON, puede usar el JSON.stringify() método. Esto se demuestra a continuación:
1 2 3 4 5 6 7 8 9 10 |
var first = [ 1, 2, [3, 4, 5] ]; var second = [ 1, 2, [3, 4, 5] ]; var isEqual = JSON.stringify(first) === JSON.stringify(second); console.log(isEqual); /* Resultado: true */ |
La solución anterior podría no funcionar si su array contiene un nullish
valor (es decir, null
o undefined
) u otro objeto pero funciona bien para otros valores primitivos como números y strings.
3. Función personalizada
Finalmente, puede escribir lógica personalizada para determinar si dos arrays son equivalentes. El siguiente ejemplo de código muestra cómo implementar esto.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
function isEqual(a, b) { if (a instanceof Array && b instanceof Array) { if (a.length !== b.length) { return false; } for (var i = 0; i < a.length; i++) { if (!isEqual(a[i], b[i])) { return false; } } return true; } return a === b; } var first = [ 1, 2, [3, 4, 5] ]; var second = [ 1, 2, [3, 4, 5] ]; var isEqual = isEqual(first, second); console.log(isEqual); /* Resultado: true */ |
4. Uso String.prototype.toString()
función
Para una array primitiva de números y cadenas, simplemente puede llamar a toString():
1 2 3 4 5 6 7 8 9 |
var first = [ 1, 2, 3, 4, 5 ]; var second = [ 1, 2, 3, 4, 5 ]; var isEqual = first.toString() === second.toString(); console.log(isEqual); /* Resultado: true */ |
Como alternativa, utilice el Array.prototype.every()
para comparar cada elemento de la array con elementos de la otra array.
1 2 3 4 5 6 7 8 9 10 11 |
var first = [ 1, 2, 3, 4, 5 ]; var second = [ 1, 2, 3, 4, 5 ]; var isEqual = first.length === second.length && first.every((value, index) => value === second[index]) console.log(isEqual); /* Resultado: true */ |
Eso es todo acerca de comparar arrays en JavaScript.