断言两个2D数组是否相等

时间:2014-11-24 10:22:39

标签: javascript multidimensional-array

给定两个2D数组,我如何判断它们是否相等?

例如:

array1 = [[1,0],[2,1],[3,0]]
array2 = [[1,0],[2,1],[3,1]]

检查array1 == array2是否有效的方法是什么?

3 个答案:

答案 0 :(得分:4)

如果相等意味着数组内容具有相同顺序的相同元素,那么最短(但不是最快)方式将是:

JSON.stringify(array1) === JSON.stringify(array2)

这适用于任何维度的数组。

UPDATE:如果您需要一个非常快速的算法,那么简单的迭代将更好地工作。然而,它不那么万无一失,因此为了使您真正安全可靠,您需要花费更多的开发时间。以下是现代浏览器的一种可能解决方案:

function equal(array1, array2) {
    if (!Array.isArray(array1) && !Array.isArray(array2)) {
        return array1 === array2;
    }

    if (array1.length !== array2.length) {
        return false;
    }

    for (var i = 0, len = array1.length; i < len; i++) {
        if (!equal(array1[i], array2[i])) {
            return false;
        }
    }

    return true;
}

以下JSPerf速度测试显示此算法优于短JSON方法的优势:http://jsperf.com/2d-array-comparion

答案 1 :(得分:1)

最有效的方法总是取决于数组的大小以及应用程序和使用情况。如果不匹配,您可以检查2个阵列的长度以提前终止,但如果很少发生这种情况,这可能会被视为额外步骤。

boolean areEqual(array array1, array array2){
if array1.length != array2.length
    return false;
for (int i=0;i<array1.length; i++)
    if(!areEqual(array1[i], array2[i])
        return false;
return true;
}

boolean areEqual(int first, int second){
    return first == second;
}

答案 2 :(得分:0)

可行的方法是迭代嵌套循环中的所有值,按值比较值。使用在第一次不匹配时设置为false的布尔值,并在测试中断言此布尔值为true。