Guía y comprobaciones
Igual referencia no significa igual contenido
Dos literales de array diferentes no son el mismo objeto. Por eso [1, 2] === [1, 2] devuelve falso aunque sus elementos se vean iguales. Si dos variables apuntan al mismo array, la comparación de referencia sí es verdadera.
Una comparación ordenada de valores primitivos
La función siguiente exige la misma longitud y compara cada posición con Object.is. Su alcance son listas de valores primitivos; no realiza una comparación recursiva de objetos.
function mismasPosiciones(a, b) {
if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) {
return false;
}
for (let i = 0; i < a.length; i++) {
if ((i in a) !== (i in b)) return false;
if (!Object.is(a[i], b[i])) return false;
}
return true;
}
console.log(mismasPosiciones([1, 2], [1, 2])); // true
console.log(mismasPosiciones([1, 2], [2, 1])); // false
console.log(mismasPosiciones([NaN], [NaN])); // true
console.log(mismasPosiciones([0], [-0])); // false
Se comprueba además si existe cada posición para no equiparar un hueco de un array disperso con una posición cuyo valor sea undefined.
Decide si importa el orden
Una lista de pasos o una clasificación suele depender del orden. Un conjunto de etiquetas puede no depender de él. Antes de ordenar y comparar, decide si los duplicados importan: ['a', 'a', 'b'] no equivale a ['a', 'b'] cuando cuentas apariciones. Convertir a Set descartaría esa información.
Para objetos, compara una clave de identidad definida por tu aplicación o utiliza una comparación profunda con un contrato claro. Serializar con JSON.stringify no es una solución universal: transforma u omite ciertos valores y la representación puede depender de cómo se construyeron los objetos.
Qué probar
Incluye listas vacías, distinta longitud, un cambio en la última posición y un duplicado adicional. Si quieres que cero y menos cero sean equivalentes, ajusta la regla de igualdad conscientemente. El nombre de una función de comparación debería reflejar la regla que aplica, no prometer igualdad para cualquier estructura.
Preguntas frecuentes
¿Por qué === da false con dos listas iguales?
Porque compara si son el mismo objeto, no sus elementos.
¿La función sirve para listas de objetos?
No compara sus campos. Decide una clave o una estrategia de igualdad profunda acorde a tus datos.
Continúa con una guía relacionada
Documentación oficial
Fuentes consultadas
Fuentes y referencias
Consulta referencias útiles para ampliar o contrastar esta guía.
Siguiente lectura
Guias relacionadas para continuar
Si quieres seguir con el mismo tema, aqui tienes paginas cercanas que amplian la tecnica, comparan variantes o te llevan a la siguiente rutina.