#author("2022-07-18T04:43:03+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 (let i = 0; i < data.length; i++) {
   console.log(data[i]);
 }
 // [出力]
 // 1
 // 2
 // undefined
 // 4
-forEach で処理 &color(red){(空データは呼び出されない)};
 data.forEach((val) => {
   console.log(val);
 });
 // [出力]
 // 1
 // 2
 // 3
-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 は使えないため要注意
トップ   差分 バックアップ リロード   一覧 検索 最終更新   ヘルプ   最終更新のRSS