私はこの小さなコードソースを持っています
for (i = 0; i < elements.length; i++) {
console.log(i);
(function (i) {
if (elements[i]["id"] == id) {
index = i;
console.log(i);
}
})(i);
}
console.log(index);
サブ要素 "id" = id; である配列の要素インデックスを見つけたい。しかし、時々 0 と 1 を返します。このコードは、クラス内の関数内にあります。同じ関数を 2 回呼び出しますが、クラス外のパラメーターが異なるため、最初に 0 と 1 を表示する必要がありますが、1 と 0 を表示することもあります。この方法も試しましたがうまくいきません。
var i = 0;
while (i < elements.length) {
console.log(elements[i]["id"]);
if (elements[i]["id"] == id) {
index = i;
break;
} else if (elements[i]["id"] != id) {
i++;
}
}
console.log(index);
これが私のテストページです。Chromeで開くと(時々発生しますが、Firefoxではほとんど発生します)、ボタンを押すと小さな画像が表示される場合と消える場合があります。「inspect elements -> console」でコンソール出力を確認することもできます。
編集
このようにデバッグを改善するためにコードを変更しました(Landoが提案したように):
for (i in elements){
console.log("comparing elements['"+ i +"']['id']: "+ elements[i]["id"] +" with id:' "+ id + "'");
if(elements[i]["id"] == id){
index = i;
}
}
console.log(index);
コンソール出力を取得しました:
comparing elements['0']['id']: id2 with id:' id1' Slideshow.js:140
comparing elements['1']['id']: id1 with id:' id1' Slideshow.js:140
1 Slideshow.js:147
comparing elements['0']['id']: id2 with id:' id2' Slideshow.js:140
comparing elements['1']['id']: id1 with id:' id2' Slideshow.js:140
0
それがいつあるべきか:
comparing elements['0']['id']: id1 with id:' id1' Slideshow.js:140
comparing elements['1']['id']: id2 with id:' id1' Slideshow.js:140
0 Slideshow.js:147
comparing elements['0']['id']: id1 with id:' id2' Slideshow.js:140
comparing elements['1']['id']: id2 with id:' id2' Slideshow.js:140
1
編集2
出力を見た後、配列の「要素」内のオブジェクトが場所を変更し、本来あるべき場所にelements[0]["id"]
なっ"id2"
たことが"id1"
わかりました。なぜこれが起こっているのか、またはそれを修正するために何をすべきかはまだ明確に言えません。アイデアがあれば共有してください。