forEach【要素処理】
reduce【隣接要素処理 (順方向)】
reduceRight【隣接要素処理 (逆方向)】
Array.prototype.forEach【要素処理】
メモ
概要
- 各要素を指定関数で処理
- 存在しない要素に対しては処理なし
- コールバック関数で配列の変更も可能
関連
外部リンク
- ECMA-262 (英語)
Array.prototype.forEach ( callbackfn [ , thisArg ] ) ES2024 (15) ES2023 (14) ES2022 (13)
構文
array.forEach( callbackfn[, thisArg] )
なし
callbackfnコールバック関数 (詳細は下記参照)
thisArgcallbackfn内でthis で参照されるオブジェクト
TypeError callbackfnが呼び出し不可
コールバック関数 引数名 (例) | 説明 |
---|---|
value | 要素値 |
index | 要素インデックス |
array | 配列 オブジェクト |
戻り値型 | 説明 |
なし |
例
// 偶数チェック
function func(value, index, array) {
console.log(value, index, array);
if ((value % 2) == 0) {
console.log("偶数");
}
}
// 倍数チェック
function func2(value, index, array) {
console.log(value, index, array, this);
if ((value % this) == 0) {
console.log(this + "の倍数");
}
}
var array = [1, , 3, 4, 5, 6]; // 2番目の項目は省略
array.forEach(func);
// 出力:1 0 [1, 2: 3, 3: 4, 4: 5, 5: 6]
// 出力:3 2 [1, 2: 3, 3: 4, 4: 5, 5: 6]
// 出力:4 3 [1, 2: 3, 3: 4, 4: 5, 5: 6]
// 出力:偶数
// 出力:5 4 [1, 2: 3, 3: 4, 4: 5, 5: 6]
// 出力:6 5 [1, 2: 3, 3: 4, 4: 5, 5: 6]
// 出力:偶数
array.forEach(func2, 3); // 初期値指定
// 出力:1 0 [1, 2: 3, 3: 4, 4: 5, 5: 6] Number { 3 }
// 出力:3 2 [1, 2: 3, 3: 4, 4: 5, 5: 6] Number { 3 }
// 出力:3の倍数
// 出力:4 3 [1, 2: 3, 3: 4, 4: 5, 5: 6] Number { 3 }
// 出力:5 4 [1, 2: 3, 3: 4, 4: 5, 5: 6] Number { 3 }
// 出力:6 5 [1, 2: 3, 3: 4, 4: 5, 5: 6] Number { 3 }
// 出力:3の倍数
array.forEach(null); // TypeError 例外 (関数不正)
Array.prototype.reduce【隣接要素処理 (順方向)】
メモ
概要
- 各要素を順方向に処理 (直前要素の処理結果を引継ぎ)
- 存在しない要素に対しては処理なし
- コールバック関数で配列の変更も可能
関連
- 逆方向:reduceRight【隣接要素処理 (逆方向)】
- 隣接要素参照なし:forEach【要素処理】
外部リンク
- ECMA-262 (英語)
Array.prototype.reduce ( callbackfn [ , initialValue ] ) ES2024 (15) ES2023 (14) ES2022 (13)
構文
array.reduce( callbackfn[, initialValue] )
最後のcallbackfnの戻り値 (空配列の場合、initialValue)
callbackfnコールバック関数 (詳細は下記参照)
initialValue初期値 (初回callbackfn呼び出しのpreviousValue)
省略:2つ目の要素からcallbackfnが呼び出され、1つ目の要素値がpreviousValue引数
TypeError
callbackfnが呼び出し不可
空配列でinitialValueが未指定
コールバック関数 引数名 (例) | 説明 |
---|---|
previousValue | 指定された初期値 (初回) または 1つ前の呼び出し時の戻り値 |
currentValue | 現在の要素値 |
currentIndex | 現在の要素インデックス |
array | 配列 オブジェクト |
戻り値型 | 説明 |
任意 | 次回の呼び出しpreviousValue引数 |
例
// 隣接要素の差分 (戻り値は現在の要素値)
function func(previousValue, currentValue, currentIndex, array) {
console.log(previousValue, currentValue, currentIndex, array, (currentValue - previousValue));
return currentValue;
}
var array = [1, , 3, 9, 7]; // 2番目の項目は省略
console.log(array.reduce(func));
// 出力:1 3 2 [1, 2: 3, 3: 9, 4: 7] 2
// 出力:3 9 3 [1, 2: 3, 3: 9, 4: 7] 6
// 出力:9 7 4 [1, 2: 3, 3: 9, 4: 7] -2
// 出力:7
console.log(array.reduce(func, 100)); // 初期値指定
// 出力:100 1 0 [1, 2: 3, 3: 9, 4: 7] -99
// 出力:1 3 2 [1, 2: 3, 3: 9, 4: 7] 2
// 出力:3 9 3 [1, 2: 3, 3: 9, 4: 7] 6
// 出力:9 7 4 [1, 2: 3, 3: 9, 4: 7] -2
// 出力:7
array = []; // 空配列
console.log(array.reduce(func, 123)); // 出力:123
console.log(array.reduce(func)); // TypeError 例外 (空配列で初期値が未指定)
console.log(array.reduce(null)); // TypeError 例外 (関数不正)
Array.prototype.reduceRight【隣接要素処理 (逆方向)】
メモ
概要
- 各要素を逆方向に処理 (直前要素の処理結果を引継ぎ)
- 存在しない要素に対しては処理なし
- コールバック関数で配列の変更も可能
関連
- 順方向:reduce【隣接要素処理 (順方向)】
- 隣接要素参照なし:forEach【要素処理】
外部リンク
- ECMA-262 (英語)
Array.prototype.reduceRight ( callbackfn [ , initialValue ] ) ES2024 (15) ES2023 (14) ES2022 (13)
構文
array.reduceRight( callbackfn[, initialValue] )
最後のcallbackfnの戻り値 (空配列の場合、initialValue)
callbackfnコールバック関数 (詳細は下記参照)
initialValue初期値 (初回callbackfn呼び出しの previousValue)
省略:最後から2つ目の要素からcallbackfnが呼び出され、最後の要素値が previousValue 引数
TypeError
callbackfnが呼び出し不可
空配列でinitialValueが未指定
コールバック関数 引数名 (例) | 説明 |
---|---|
previousValue | 指定された初期値 (初回) または 1つ前の呼び出し時の戻り値 |
currentValue | 現在の要素値 |
currentIndex | 現在の要素インデックス |
array | 配列 オブジェクト |
戻り値型 | 説明 |
任意 | 次回の呼び出しpreviousValue引数 |
例
// 隣接要素の差分 (戻り値は現在の要素値)
function func(previousValue, currentValue, currentIndex, array) {
console.log(previousValue, currentValue, currentIndex, array, (currentValue - previousValue));
return currentValue;
}
var array = [1, , 3, 9, 7]; // 2番目の項目は省略
console.log(array.reduceRight(func));
// 出力:7 9 3 [1, 2: 3, 3: 9, 4: 7] 2
// 出力:9 3 2 [1, 2: 3, 3: 9, 4: 7] -6
// 出力:3 1 0 [1, 2: 3, 3: 9, 4: 7] -2
// 出力:1
console.log(array.reduceRight(func, 100)); // 初期値指定
// 出力:100 7 4 [1, 2: 3, 3: 9, 4: 7] -93
// 出力:7 9 3 [1, 2: 3, 3: 9, 4: 7] 2
// 出力:9 3 2 [1, 2: 3, 3: 9, 4: 7] -6
// 出力:3 1 0 [1, 2: 3, 3: 9, 4: 7] -2
// 出力:1
array = []; // 空配列
console.log(array.reduceRight(func, 123)); // 出力:123
console.log(array.reduceRight(func)); // TypeError 例外 (空配列で初期値が未指定)
console.log(array.reduceRight(null)); // TypeError 例外 (関数不正)