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

IT技术 javascript arrays comparison
2021-03-09 01:43:46

我想检查两个数组是否相同(不是内容方面的,但顺序完全相同)。

例如:

 array1 = [1,2,3,4,5]
 array2 = [1,2,3,4,5]
 array3 = [3,5,1,2,4]

数组 1 和 2 相同,但数组 3 不同。

在 JavaScript 中是否有一个很好的方法来做到这一点?

2个回答

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

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()方法——一旦定义了函数。如果这成为一个问题,它的内存密集度也较低。
2021-04-15 01:43:46
不错的做法。有一个小问题:变量 i 应该从 arr1.length - 1 到 0,而不是从 arr1.length 到 0。
2021-04-23 01:43:46
@mimarcel:该i--语句在迭代开始之前计算一次。
2021-04-27 01:43:46
@AniruddhaDas:这仅适用于“已排序”数组,因为该问题要求按顺序相等,而不仅仅是同构。
2021-05-02 01:43:46
@palswim 你是对的!我没有意识到它i--有双重伎俩。:)
2021-05-07 01:43:46

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

array1.toString() == array2.toString()
array1.toString() !== array3.toString()

但这也会使

array4 = ['1',2,3,4,5]

如果这对您很重要,则等于 array1

或者 array1.join() == array3.join(); 但这不会检查类型
2021-04-22 01:43:46
谢谢,可能有助于快速测试 2 个数组并保持可读性,即使这不是完美的方法;)
2021-04-24 01:43:46
刚跑一些快速测试和for循环是多少,MUCH快于toString法。在我的测试中,for循环的最坏情况20x更快。最坏的情况是for循环80x速度更快。所以基本上永远不要使用这种方法,它既错误又缓慢:)。
2021-05-02 01:43:46
这是完全错误的,因为它似乎表明 [ 1, 2 ] 等于 [ '1,2' ] 并且也等于 [ 1, '2' ]..... 等等等等。
2021-05-04 01:43:46
它忽略了每个项目的类型。
2021-05-13 01:43:46