我想检查两个阵列是否相同 (不是明智的,但按照正确的顺序)。如何以最有效的方式检查相同的数组?
例如:
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