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関数をコールバック関数を使って宣言してみます。
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の大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^