2010-10-26 102 views
51

我想检查两个阵列是否相同 (不是明智的,但按照正确的顺序)。如何以最有效的方式检查相同的数组?

例如:

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

阵列1和2是相同的,但3不是。

有没有一种很好的方法在JavaScript中做到这一点?

+1

我认为一些答案是针对“代码行”的效率,比如larry k,而另一些则是为了提高执行效率。可悲的是,你没有说明你在找哪个:) – 2010-10-26 17:01:17

+0

@koopajah没有投票结束,因为不同的是旧的问题是设置比较,这是与内容的顺序一起设置的比较。因此,设置一个== b &&一组与b的顺序相同。 – David 2013-02-14 13:02:35

+0

你可能想检查[比较两个数组的Javascript - 关联](http://stackoverflow.com/questions/1107237/compare-two-arrays-javascript-associative) – Saul 2010-10-26 16:52:20

回答

90

那么,什么是错检查每个元素反复?

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我认为这将是最安全的。 – user113716 2010-10-26 16:59:23

+2

它是最安全,最快速,更灵活,总是准确的,实际上* array * join()'方法更优雅“ - 一旦函数被定义。如果这成为一个问题,它的内存密集程度也会降低。 – 2010-10-26 17:40:01

+1

不错的做法。有一个小问题:变量i应该从arr1.length - 1变为0,而不是从arr1.length变为0. – mimarcel 2014-09-09 21:13:01

19

您可以比较字符串表示这样:

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

但也会使

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

等于阵列1如果这对你很重要

+6

这显然是错误的,因为它似乎表明[1 ,2]等于['1,2']并且也等于[1,'2'] .....等等。 – davidhadas 2015-12-25 12:46:36

+0

它忽略了每个项目的类型。 – Ron 2016-01-23 00:20:10

+5

刚跑过一些快速测试,'for'循环多了,比'toString'方法快了许多*。在我的测试中,'for'循环的最坏情况是快20倍。最糟糕的情况是'for'循环速度快了80倍。所以基本上不要使用这种方法,这是错误的,而且速度慢:)。 – Maverick 2016-11-30 03:14:09

相关问题