2010-10-26 18 views
51

Quiero comprobar si los dos conjuntos son idénticos (no el contenido sabia, pero en el orden exacto).¿Cómo verificar la matriz idéntica de la manera más eficiente?

Por ejemplo:

array1 = [1,2,3,4,5] 
array2 = [1,2,3,4,5] 
array3 = [3,5,1,2,4] 

de matriz 1 y 2 son idénticos, pero 3 no lo es.

¿Hay una buena manera de hacer esto en JavaScript?

+1

Creo que algunas de las respuestas van a "líneas de código" eficiencia, como Larry K, mientras que otros van a la velocidad de la eficiencia de la ejecución. lamentablemente, usted no indicó cuál estaba buscando :) –

+0

@koopajah No votó para cerrar, ya que la diferencia es que la pregunta anterior se establece en comparación y se establece la comparación junto con el orden de los contenidos. Así que configure a == b && un conjunto está en el mismo orden que b. – David

+0

Es posible que desee comprobar [comparar dos matrices Javascript - Asociativo] (http://stackoverflow.com/questions/1107237/compare-two-arrays-javascript-associative) – Saul

Respuesta

90

Así que, ¿qué pasa con la comprobación de cada elemento iterativamente?

function arraysEqual(arr1, arr2) { 
    if(arr1.length !== arr2.length) 
     return false; 
    for(var i = arr1.length; i--;) { 
     if(arr1[i] !== arr2[i]) 
      return false; 
    } 

    return true; 
} 
+4

1 creo que esto sería más seguro. – user113716

+2

Es más seguro, más rápido, más flexible, siempre exacto, y en realidad * más * "elegante" que el enfoque 'array.join()' - una vez que se define la función. También consume menos memoria, si eso se convierte en un problema. –

+1

Buen enfoque. Hay un pequeño problema: la variable debería ir de arr1.length - 1 a 0, no de arr1.length a 0. – mimarcel

19

Se podría comparar representaciones cadena para:

array1.toString() == array2.toString() 
array1.toString() !== array3.toString() 

sino que también haría

array4 = ['1',2,3,4,5] 

igual a Array1 si que importa a usted

+6

Esto es simplemente erróneo, ya que parece sugerir que [1 , 2] es igual a ['1,2'] y también es igual a [1, '2'] ..... etc. etc. – davidhadas

+0

Pasó por alto el tipo de cada elemento. – Ron

+5

Acaba de ejecutar algunas pruebas rápidas y un bucle 'for' es mucho, * MUCHO * más rápido que el método' toString'. En mis pruebas, el peor escenario para el bucle 'for' era' 20x' más rápido. El peor caso fue el bucle 'for' siendo' 80x' más rápido. Así que, básicamente, nunca uses este método, es a la vez erróneo y lento :). Gracias – Maverick

Cuestiones relacionadas