Javascript 如何以最有效的方式检查相同的阵列?
我想检查两个数组是否相同 (不是内容方面的,而是按照准确的顺序) 例如:Javascript 如何以最有效的方式检查相同的阵列?,javascript,arrays,comparison,Javascript,Arrays,Comparison,我想检查两个数组是否相同 (不是内容方面的,而是按照准确的顺序) 例如: array1 = [1,2,3,4,5] array2 = [1,2,3,4,5] array3 = [3,5,1,2,4] 数组1和数组2相同,但数组3不同 在JavaScript中有没有一种很好的方法可以做到这一点?您可以比较字符串表示,以便: array1.toString() == array2.toString() array1.toString() !== array3.toString() 但这也会
array1 = [1,2,3,4,5]
array2 = [1,2,3,4,5]
array3 = [3,5,1,2,4]
数组1和数组2相同,但数组3不同
在JavaScript中有没有一种很好的方法可以做到这一点?您可以比较字符串表示,以便:
array1.toString() == array2.toString()
array1.toString() !== array3.toString()
但这也会导致
array4 = ['1',2,3,4,5]
等于数组1,如果这对您很重要那么,迭代检查每个元素有什么不对
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;
}
定义函数后,
array.join()
方法将是最安全、最快、更灵活、始终准确、实际上更“优雅”的方法。如果这成为一个问题的话,它的内存占用也会减少。这是一个不错的方法。有一个小问题:变量i应该从arr1.length-1变为0,而不是从arr1.length变为0。@mimarcel:i--
语句在迭代开始之前计算一次。@palswim你说得对!我不知道我--
有双重把戏。:)@阿尼鲁达达斯:这只适用于“排序”数组,因为,不仅仅是同构。你可能想检查一下,我认为一些答案是为了“代码行”效率,比如larry k,而其他答案是为了执行效率的速度。遗憾的是,你没有说明你要找的是哪一个:)@koopajah没有投票结束,因为区别在于老问题是集合比较,这是集合比较以及内容顺序。因此,集合a==b&&a集合的顺序与b相同。这显然是错误的,因为它似乎表明[1,2]等于['1,2'],也等于[1,2']。。。。。等等,等等。它忽略了每个项目的类型。只是运行了一些快速测试,for
循环比toString
方法快得多。在我的测试中,for
循环的最坏情况是20x
更快。最坏的情况是for
循环的80x
速度更快。因此,基本上永远不要使用这种方法,它既错误又缓慢:)。谢谢,快速测试2个数组并保持可读性非常有用,即使这不是最好的方法;)或array1.join()==array3.join()代码>但这不检查类型