#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 は使えないため要注意