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


コメント