我花了近一個半小時,試圖找到我的代碼中的錯誤,當我終於意識到,這段JavaScript代碼:爲什麼「[[1,2],[3,4]]。indexOf([1,2])」返回-1?
[[1, 2], [3, 4]].indexOf([1, 2]);
回報-1
,即使一些諸如[1, 2, 3].indexOf(1);
正確返回0 ...
爲什麼會發生這種情況,以及如何找到子數組的正確索引?
我花了近一個半小時,試圖找到我的代碼中的錯誤,當我終於意識到,這段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