如何以最有效的方式检查相同的数组?

ssd*_*ign 79 javascript arrays comparison

我想检查两个数组是否相同(不是内容明确,但按照确切的顺序).

例如:

 array1 = [1,2,3,4,5]
 array2 = [1,2,3,4,5]
 array3 = [3,5,1,2,4]
Run Code Online (Sandbox Code Playgroud)

阵列1和2相同但3不相同.

有没有一种很好的方法在JavaScript中执行此操作?

pal*_*wim 145

那么,迭代地检查每个元素有什么问题呢?

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;
}
Run Code Online (Sandbox Code Playgroud)

  • 它是最安全,最快速,更灵活,始终准确,实际上*更"优雅"的`array.join()`方法 - 一旦定义了函数.如果这成为一个问题,它也会减少内存密集度. (3认同)
  • @mimarcel:`i--`语句在迭代开始之前评估一次。 (2认同)

Ada*_*dam 45

您可以比较字符串表示,以便:

array1.toString() == array2.toString()
array1.toString() !== array3.toString()
Run Code Online (Sandbox Code Playgroud)

但那也会

array4 = ['1',2,3,4,5]
Run Code Online (Sandbox Code Playgroud)

等于array1,如果这对你很重要

  • 这是完全错误的,因为它似乎表明[1,2]等于['1,2']并且等于[1,'2'] .....等等. (21认同)
  • 刚刚运行了一些快速测试,`for`循环比`toString`方法快**快*.在我的测试中,`for`循环的最坏情况是'20x`更快.最糟糕的情况是`for`循环速度快了80倍.所以基本上不要使用这种方法,它既错误又缓慢:). (14认同)
  • 或者`array1.join()== array3.join();`但这不检查类型 (4认同)