JavaScriptのforループにおけるキーと要素の混同
月の名前を持つ配列があるとします:
let arr = [
'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
];
変数 month に現在の月の番号が
格納されているとします:
let month = 10;
ループを使用してすべての月を出力し、 その際に現在の月を斜体で出力してみましょう。
あるプログラマーは既にこの問題を解決しましたが、
彼は誤って、変数 month に月の名前ではなく
月の番号が格納されていることに気づきませんでした:
for (let i = 0; i < arr.length; i++) {
if (month === arr[i]) { // エラーはここ
document.write('<i>' + arr[i] + '</i>');
}
else {
document.write(arr[i]);
}
document.write('<br>');
}
このプログラマーは配列の要素を
変数 month と比較しています。
しかし、この変数には月の番号が格納されており、
名前ではありません!
コードを正しく動作させるには、
month を月の番号、つまり
カウンタ i の値と比較する必要があります:
for (let i = 0; i < arr.length; i++){
if (month === i) { // エラーを修正
document.write('<i>' + arr[i] + '</i>');
}
else {
document.write(arr[i]);
}
document.write('<br>');
}