为什么“[[1,2],[3,4]]。indexOf([1,2])”返回-1?
我花了近一个半小时,试图找到我的代码中的错误,当我终于意识到,这段JavaScript代码:为什么“[[1,2],[3,4]]。indexOf([1,2])”返回-1?
[[1, 2], [3, 4]].indexOf([1, 2]);
回报-1
,即使一些诸如[1, 2, 3].indexOf(1);
正确返回0 ...
为什么会发生这种情况,以及如何找到子数组的正确索引?
的indexOf
只需要原始参数,你无法比拟的:
[1, 2] == [1, 2]
这显然给了false
。
'indexOf'做一个'==='而不是'== '。现在尝试向OP解释为什么'[42,NaN] .indexOf(NaN)'返回'-1'。 :D –
@IonicăBizău'NaN == NaN'和'NaN === NaN'都返回'false'。 'NaN'不是原始类型。 –
@IonicăBizău - “indexOf做一个===而不是==” - 这在这里没有什么不同。 – Quentin
您可以迭代数组并检查模式的每个项目并返回索引。
function getIndexOf(array, pattern) {
var index = -1;
array.some(function (a, i) {
if (a.length !== pattern.length) {
return false;
}
if (a.every(function (b, j) { return b === pattern[j]; })) {
index = i;
return true;
}
});
return index;
}
console.log(getIndexOf([[1, 2], [3, 4], [7, 8]], [7, 8]));
用JSON和indexOf
的另一种方式。
function getIndexOf(array, pattern) {
return array.map(function (a) { return JSON.stringify(a); }).indexOf(JSON.stringify(pattern));
}
console.log(getIndexOf([[1, 2], [3, 4], [7, 8]], [7, 8]));
或者可以使用** a.join(“”)**而不是** JSON.stringify(a)** –
因为'[1,2]!== [1,2]'。 – Cristy
在这里你可以找到更多的方法来比较数组:http://stackoverflow.com/questions/7837456/how-to-compare-arrays-in-javascript – sinisake