在二维数组内搜索

时间:2011-02-21 20:47:33

标签: javascript multidimensional-array equals

我知道我错过了一些明显的东西,但我似乎无法找到我的错误。我想看看数组是否在另一个二维数组中。这是我的代码:

var cell = [0, 0];
var population = [[0, 0], [1, 1]];

if (cell == population[0]) {
    alert("Cell found within population");
}
else if ([0, 0] == population[0]) {
    alert("Array found within population");
}
else {
    alert("Neither found within population");
}

我使用第二个条件只是为了确保cell和population [0]的值不相等。但事实证明,它们都不匹配。我已经测试过(cell [0] == population [0] [0]),这似乎有效。

我将不胜感激任何澄清。谢谢!

4 个答案:

答案 0 :(得分:3)

这里的问题是javascript中数组的==运算符比较了内存​​地址而不是实际值。这就是为什么你注意到(cell [0] == population [0] [0])返回true(你正在比较值)。

您应该遍历数组中的元素以进行比较。这是我的意思的一个例子。

function checkEquivalence(arr1, arr2){
    if(arr1.length != arr2.length) 
        return false;     
    for (i = 0; i < arr2.length; i++)
    {
        if(arr1[i] != arr2[i])
           return false;
    }
    return true;
}

现在您可以运行checkEquivalence( cell, population[0] );

操作了

答案 1 :(得分:0)

不幸的是你不能直接比较数组,你必须逐个元素地比较它们:

function compareArrays(arrayOne, arrayTwo) {
    if (arrayOne.length != arrayTwo.length) {
        return false;
    }
    for (var i = 0; i < arrayOne.length; ++i) {
        if (arrayOne[i] != arrayTwo[i]) { 
             return false;
        }
    }
    return true;
}

现在你可以使用:

compareArrays([0, 0], population[0])

......这将产生真实。

答案 2 :(得分:0)

您可能需要进行某种深度相等比较,以查看两个对象(包括数组)是否与值“相等”。看看Object comparison in JavaScript,或google了解Javascript深度相等。

答案 3 :(得分:0)

如果你的比较总是这么简单,那么一个糟糕的工作就是:

if(cell.valueOf() == population[0].valueOf())  {
    ...
}

以上将有效比较两个字符串,将逻辑更改为:

if('0,0' == '0,0') {
    ...
}

绝对不推荐与我合作的任何人使用最佳实践,但在极端控制的情况下非常有用。