JavaScript

Array.prototype.forEach()メソッド

 編集:2022.08.18 by T.A.

その Array の要素にコールバック関数に掛けます。空要素には処理されません。

コールバック関数による:

arr.forEach(callback[, thisArg])
関数部:
function 関数名(element[, index[, array]]){
 処理
}

インラインコールバック関数による:

arr.forEach(function(element[, index[, array]]){処理}[, thisArg])

アロー関数による:

arr.forEach( (element[, index[, array]]) => {処理})
arr Arrayオブジェクト
callback 実行する関数名を記述。
関数名 callbackと同じ名前を記述。
処理 処理プログラム。必ずreturnで評価結果を返す。

アロー関数使用の場合、「{ }」に囲まれていない場合は評価式となります。

element 現在処理されている配列の要素です。
index 省略可。配列内の element の添字です。
array 省略可。forEach() が呼び出されている配列です。
thisArg 省略可。callback 内で this として使用する値です。
戻り値

undefined です。

解説

forEach() は、与えられた関数 callback を配列に含まれる各要素に対して一度ずつ、昇順で呼び出します。インデックス プロパティが削除されていたり、初期化されていなかったりした場合は呼び出されません。(疎らな配列については、下記の例を参照。)

callback は次の 3 つの引数で呼び出されます。

forEach() に thisArg 引数が与えられると、callback の呼び出し時にそのオブジェクトが thisArg として使用されます。callback によって究極に管理される this の値は、関数から見える this を特定する一般規則に従います。

forEach() によって処理される配列要素の範囲は、callback が最初に呼び出される前に設定されます。forEach() の呼び出しが開始された後に追加された配列要素に対しては、callback は実行されません。既存の配列要素が変更または削除された場合、callback に渡される値は forEach() がそれらを参照した時点での値になります。削除された配列要素を参照することはありません。既に参照された配列要素がイテレーションの間(e.g. shift()を使用して)に削除された場合、後の要素は飛ばされます。(下記の例を参照してください。)

forEach() は配列の各要素に対して callback 関数を一度ずつ実行します。map()reduce() と異なり、返値は常に undefined であり、チェーンできません。チェーンの最後に副作用を生じさせるのが典型的な使用法です。

forEach() は呼び出された配列を変化させません。(ただし callback が変化させる可能性があります)

例外を発生する以外の方法で、forEach() ループを止めることはできません。ループ中に中断する必要がある場合、forEach() メソッドは適切な方法ではありません。

早期終了を行うには下記のような手段が適しています。

他の Array のメソッドである every(), some(), find(), findIndex() は、配列の要素を検査する際、truthy の値を返すことで以降の繰り返しが必要であるかどうかを決めます。

forEach は同期関数を期待する forEach はプロミスを待ちません。forEach のコールバックとしてプロミス(または非同期関数)を使用する場合は、その意味合いを理解しておくようにしてください。

コード例:

let ratings = [5, 4, 5];
let sum = 0;
let sumFunction = async function (a, b){ return a + b}
ratings.forEach(async function(rating) {
  sum = await sumFunction(sum, rating)
})
D=sum; // 期待される出力:14。実際の出力:0
初期化されていない値については何もしない(疎らな配列)
A=[1, 3, , 7];
let Cunt=0;
A.forEach((Ele) => {
  alert(Ele); //表示:1、3、7。空要素は処理されない。
  Cunt++
})
D=Cunt; //=3

¶以下省く


テスト