2010-10-26 98 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

相關問題