私は最後の時間を過ごし、半分は私が最終的にこのJavaScriptコードことに気づいたとき、私のコードのバグを発見しようとしている:なぜ["[1,2]、[3、4]]。indexOf([1,2])"は-1を返しますか?
[[1, 2], [3, 4]].indexOf([1, 2]);
戻り-1
、正しく0を返すにもかかわらず、何かなど[1, 2, 3].indexOf(1);
として...
なぜこのようなことが起こり、サブアレイの正しいインデックスを見つけることができますか?
私は最後の時間を過ごし、半分は私が最終的にこのJavaScriptコードことに気づいたとき、私のコードのバグを発見しようとしている:なぜ["[1,2]、[3、4]]。indexOf([1,2])"は-1を返しますか?
[[1, 2], [3, 4]].indexOf([1, 2]);
戻り-1
、正しく0を返すにもかかわらず、何かなど[1, 2, 3].indexOf(1);
として...
なぜこのようなことが起こり、サブアレイの正しいインデックスを見つけることができますか?
indexOf
は、プリミティブの引数を取り、あなたが一致することはできません。明らかにfalse
を与える
[1, 2] == [1, 2]
を。
'indexOf'は' ==の代わりに '===' '。今、なぜ[[42、NaN] .indexOf(NaN) 'が' -1'を返すのかをOPに説明しようとします。 :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]));
または** JSON.stringify(a)の代わりに** a.join( "")**を使用できます** –
[2、1] 'ので!== [1、2]'。 – Cristy
ここで、配列を比較する他の方法を見つけることができます:http://stackoverflow.com/questions/7837456/how-to-compare-arrays-in-javascript – sinisake