我想檢查兩個陣列是否相同 (不是明智的,但按照正確的順序)。如何以最有效的方式檢查相同的數組?
例如:
array1 = [1,2,3,4,5]
array2 = [1,2,3,4,5]
array3 = [3,5,1,2,4]
陣列1和2是相同的,但3不是。
有沒有一種很好的方法在JavaScript中做到這一點?
我想檢查兩個陣列是否相同 (不是明智的,但按照正確的順序)。如何以最有效的方式檢查相同的數組?
例如:
array1 = [1,2,3,4,5]
array2 = [1,2,3,4,5]
array3 = [3,5,1,2,4]
陣列1和2是相同的,但3不是。
有沒有一種很好的方法在JavaScript中做到這一點?
那麼,什麼是錯檢查每個元素反覆?
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;
}
+1我認爲這將是最安全的。 – user113716 2010-10-26 16:59:23
它是最安全,最快速,更靈活,總是準確的,實際上* array * join()'方法更優雅「 - 一旦函數被定義。如果這成爲一個問題,它的內存密集程度也會降低。 – 2010-10-26 17:40:01
不錯的做法。有一個小問題:變量i應該從arr1.length - 1變爲0,而不是從arr1.length變爲0. – mimarcel 2014-09-09 21:13:01
您可以比較字符串表示這樣:
array1.toString() == array2.toString()
array1.toString() !== array3.toString()
但也會使
array4 = ['1',2,3,4,5]
等於陣列1如果這對你很重要
這顯然是錯誤的,因爲它似乎表明[1 ,2]等於['1,2']並且也等於[1,'2'] .....等等。 – davidhadas 2015-12-25 12:46:36
它忽略了每個項目的類型。 – Ron 2016-01-23 00:20:10
剛跑過一些快速測試,'for'循環多了,比'toString'方法快了許多*。在我的測試中,'for'循環的最壞情況是快20倍。最糟糕的情況是'for'循環速度快了80倍。所以基本上不要使用這種方法,這是錯誤的,而且速度慢:)。 – Maverick 2016-11-30 03:14:09
我認爲一些答案是針對「代碼行」的效率,比如larry k,而另一些則是爲了提高執行效率。可悲的是,你沒有說明你在找哪個:) – 2010-10-26 17:01:17
@koopajah沒有投票結束,因爲不同的是舊的問題是設置比較,這是與內容的順序一起設置的比較。因此,設置一個== b &&一組與b的順序相同。 – David 2013-02-14 13:02:35
你可能想檢查[比較兩個數組的Javascript - 關聯](http://stackoverflow.com/questions/1107237/compare-two-arrays-javascript-associative) – Saul 2010-10-26 16:52:20