- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2022-07-18T04:20:19+09:00","","")
[[javascript/collection]]
#author("2022-07-25T00:29:13+09:00","","")
[[Javascript/collection]]
* 反復処理 [#ybfb2bbc]
&color(red){''反復処理の注意点''};
** 要素が一部ある場合 [#zd6caf5e]
let data = [1,2,,4];
// for で処理
-for で処理
for (let i = 0; i < data.length; i++) {
console.log(data[i]);
}
// [出力]
// 1
// 2
// undefined
// 4
// forEach で処理 (空データは呼び出されない)
-forEach で処理 &color(red){(空データは呼び出されない)};
data.forEach((val) => {
console.log(val);
});
// [出力]
// 1
// 2
// 3
// map で処理 (空データは呼び出されないが、戻りには空はそのまま入る)
-map で処理 &color(red){(空データは呼び出されないが、戻りには空はそのまま入る)};
let result = data.map((val) => {
let res = val + 10;
console.log(`map : ${val} -> ${res}`);
return res;
});
result;
// [出力]
// map : 1 -> 11
// map : 2 -> 12
// map : 4 -> 14
// (4) [11, 12, なし, 14]
** 削除しながらの処理 [#y3b2f048]
data = [1,2,3,4,5];
-for で回しつつ削除 &color(red){(意図しない動作になりがち)};
for (let i = 0; i < data.length; i++) {
console.log(data[i]);
data.pop();
}
// [出力]
// 1
// 2
// 3
-while + shif,pop などで処理
while (data.length) {
console.log(data.shift());
}
// [出力]
// 1
// 2
// 3
// 4
// 5
-条件によりデータを削除したい場合は、filter 等を使うと良い。
// 奇数の場合のみ抽出
let result = data.filter((x) => { return (x % 2); });
** ループのインデックスを変更しながら処理 &color(red){避けるべき}; [#aab38dd9]
let data = [ 1, 2, 3, 4, 5 ];
for (let i = 0; i < data.length; i++) {
console.log(data[i]);
if (data[i] == 3) {
i++;
}
}
// [出力]
// 1
// 2
// 3
// 5
**ループ中に処理中断したい。 [#o5afbd07]
for では、break が利用できるが、可能であればメソッドを分けて return などで。
forEach, map では、break は使えないため要注意