@sho0411

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

JavaScriptのsliceとfor文の使い方についての疑問

解決したいこと

現在、JavaScriptと他言語を使用して簡単なWebアプリを作成中です。
その中で slice()とfor文の扱いに関して少し混乱してしまったため、質問させてください。

前提

slice(start, end)はstartのインデックスを含み、endのインデックスは含まないことは理解している。
for文の基本的な構造も理解している。

やりたいこと

const list = [1, 2, 3, ..., 31]; // 1〜31の値が入っている

この配列から 1〜7日目 の値だけ取り出してループ処理をしたいです。

自分の書いたコード

const day = list.slice(0, 7); // → [1, 2, 3, 4, 5, 6, 7]

for (let i = 0; i <= day.length; i++) {
    const item = day[i];
    console.log(item);
}

list(0,7)としてlistから1から7までを取り出す。
dayの中にはインデックス0からインデックス6までが入っている。
そのため、for文で7までの値をループさせたいなら0 <= day.length(インデックス0から6まで)まで回すと思っています。

ChatGPTの回答

for (let i = 0; i < day.length; i++) {
    const item = day[i];
    console.log(item);
}

i < day.length;だとdayのインデックス5までしかループせず、1日から6日までしか取得できないのではないかと思いました。

確認したいこと

なぜ i < day.length が正しくて、i <= day.length はNGなのか。

ご教授いただけますと嬉しいです!

0 likes

2Answer

dayの0番目 から dayの6番目の7個 にデータが入ってるからです。
個数とアクセスする場合のインデックスは違うんです。
つまり、インデックスは1番目から始まるのでなく0番目からはじまりますので

全部で7個
1日 -> day[0]
2日 -> day[1]
3日 -> day[2]
4日 -> day[3]
5日 -> day[4]
6日 -> day[5]
7日 -> day[6]

ループ変数 i は、0から6まで処理をすればいいのです。
だから  i < day.length になるのです。

0Like

Comments

  1. @sho0411

    Questioner

    なるほど、わかりやすくありがとうございます!
    理解できました!

dayの中にはインデックス0からインデックス6までが入っている。

ので、day.length は 7 です。よって i < day.length が正しいです。

0Like

Comments

  1. @sho0411

    Questioner

    理解できました!ありがとうございます!

Your answer might help someone💌