我在JS中编写代码并且我必须测试代码 - 我必须检查2个数组中的元素是否相同。
所以我有一个数组:boreholes = [[66000, 457000],[1111,2222]....];
我想检查这个数组是否包含例如的元素。 [66000,457000]所以我做了:
boreholes.indexOf([66000,457000])
但它返回-1,所以我通过以下方式迭代数组:
for (var i = 0; i< boreholes.length; i++){
if (boreholes[i] == [66000, 457000]){
console.log('ok');
break;
}
};
但是我还是一无所获。有人可以解释一下我做错了什么吗?
答案 0 :(得分:3)
您正在比较不同的对象。比较对象时,当比较的2个对象是 相同的对象时,比较仅评估为true
。即
var a = [1,2,3];
var b = a;
a === b //true
b = [1,2,3];
a === b //false, b is not the same object
要比较这样的数组,您需要分别比较它们的所有元素:
for (var i = 0; i < boreholes.length; i++) {
if (boreholes[i][0] == 66000 && boreholes[i][1] == 457000) {
console.log('ok');
break;
}
}
答案 1 :(得分:3)
您无法在javascript中比较像array1 == array2
这样的数组,就像您在这里尝试的那样。
这是比较两个数组的kludge方法:
function isEqual(array1, array2){
return (array1.join('-') == array2.join('-'));
}
您现在可以在代码中使用此方法,如:
for (var i = 0; i< boreholes.length; i++){
if (isEqual(boreholes[i], [66000, 457000]){
console.log('ok');
break;
}
};
答案 2 :(得分:2)
目前我遇到了同样的问题,使用toString()方法
var array1 = [1,2,3,[1,2,3]]
var array2 = [1,2,3,[1,2,3]]
array1 == array2 // false
array1.toString() == array2.toString() // true
var array3 = [1,2,3,[1,3,2]]
// Take attention
array1.toString() == array3.toString() // false
答案 3 :(得分:0)
您也可以使用Underscore.js - 函数式编程框架。
function containsElements(elements) {
_.find(boreholes, function(ele){ return _.isEqual(ele, elements); });
}
if(containsElements([66000, 457000])) {
console.log('ok');
}
答案 4 :(得分:0)
问题不是很清楚,数组中是否有超过2个元素,所以这可能有用
var boreholes = [[66000, 457000],[1111,2222]];
var it = [66000, 457000];
function hasIt(boreholes, check) {
var len = boreholes.length;
for (var a = 0; a < len; a++) {
if (boreholes[a][0] == check[0] && boreholes[a][1] == check[1]) {
// ok
return true;
}
}
return false;
}
if (hasIt(boreholes, it)) {
// ok, it has it
}