JSのforEach文の使い方とコールバック関数
JSの配列にはforEach文が存在します。
let arr = [1,2,3,4,5]; arr.forEach((data,i,arr) => { console.log(i); });
forEachの引数はコールバック関数、もしくは上記のようにアロー関数です。
forEach文のコールバック関数は引数が3つありまして、1つ目は配列のデータ、2つ目はインクリメント(0が基底)、3つ目はforEachしている配列です。
なので、上記の結果は以下になります。
0 1 2 3 4
ちなみに、forEachを使う際は以下のようにnull,undefinedチェックしてから書いてほしいです。
let arr = [1,2,3,4,5]; if (arr) { // 配列がforEach出来るかチェックしておく arr.forEach((data,i,arr) => { console.log(i); }); }
でも本当はforEach文は使いたくない派です。
コールバック関数
コールバック関数とはそもそもなんなんでしょうか。
function minus(a, b) { return a-b; }
minus関数の宣言ではコールバック関数を使わずにreturnしています。
使い方は
minus(5, 3);
のように使います。
このminus関数をコールバック関数を使って宣言してみます。
function minus(a, b, callback) { callback(a - b); }
callbackを最後の引数で指定して、return文を使っていません。
コールバック関数を使用したminus関数の使い方は
minus(4, 2, function(ret) { return ret; // 2が返る });
のように使います。第三引数のコールバック関数を実装している点が違うだけで、minus関数自体は同じ振る舞いをする関数となります。
forEachよりasyncモジュールを使う
node.jsではforEachを使うことはほぼないです。
for-of文を使うなど代替案を考えた方が良いです。forEach内でsetTimeoutを使うと意図した通りに動作せずにさきにhello.txtが作成され、中身は空となります。
const fs = require('fs') var arr = [1,2,3,4,5,6,7,8,9,10]; var sent = ""; arr.forEach(function(i) { setTimeout(function() { sent += 'hello world: ' + i + '¥n'; }, 5000); }); fs.writeFile('hello.txt', sent, function(err) { if(err) throw err; });// hello.txtは空ファイルになってしまう
このような場合はasyncモジュールを使用します。

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント