我知道我错过了一些明显的东西,但我似乎无法找到我的错误。我想看看数组是否在另一个二维数组中。这是我的代码:
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]),这似乎有效。
我将不胜感激任何澄清。谢谢!
答案 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') {
...
}
绝对不推荐与我合作的任何人使用最佳实践,但在极端控制的情况下非常有用。