forEach【要素処理】メソッド
reduce【隣接要素処理 (順方向)】メソッド
reduceRight【隣接要素処理 (逆方向)】メソッド

Array.prototype.forEach【要素処理】メソッド

メモ

構文

forEach ( callbackfn [ , thisArg ] )

  • callbackfn:コールバック関数
    引数名 (例)説明
    value要素値
    index要素インデックス
    array配列 オブジェクト
    戻り値型説明
    なし
  • thisArg:コールバック関数内でthis で参照されるオブジェクト

  • なし

  • TypeError 例外callbackfn が呼び出し可能な関数オブジェクト以外

// 偶数チェック
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【隣接要素処理 (順方向)】メソッド

メモ

構文

reduce ( callbackfn [ , initialValue ] )

  • callbackfn:コールバック関数
    引数名 (例)説明
    previousValue指定された初期値 (初回) または 1つ前の呼び出し時の戻り値
    currentValue現在の要素値
    currentIndex現在の要素インデックス
    array配列 オブジェクト
    戻り値型説明
    任意次回の呼び出しpreviousValue引数
  • initialValue
    • 初期値 (初回コールバック関数呼び出しのpreviousValue)
    • 省略:2つ目の要素からコールバック関数が呼び出され、1つ目の要素値がpreviousValue引数

  • 最後のコールバック関数の戻り値 (空配列で初期値指定の場合、初期値)

  • TypeError 例外
    • callbackfn が呼び出し可能な関数オブジェクト以外
    • 空配列で初期値が未指定

// 隣接要素の差分 (戻り値は現在の要素値)
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【隣接要素処理 (逆方向)】メソッド

メモ

構文

reduceRight ( callbackfn [ , initialValue ] )

  • callbackfn:コールバック関数
    引数名 (例)説明
    previousValue指定された初期値 (初回) または 1つ前の呼び出し時の戻り値
    currentValue現在の要素値
    currentIndex現在の要素インデックス
    array配列 オブジェクト
    戻り値型説明
    任意次回の呼び出しpreviousValue引数
  • initialValue
    • 初期値 (初回コールバック関数呼び出しのpreviousValue)
    • 省略:最後から2つ目の要素からコールバック関数が呼び出され、最後の要素値がpreviousValue引数

  • 最後のコールバック関数の戻り値 (空配列で初期値指定の場合、初期値)

  • TypeError 例外
    • callbackfn が呼び出し可能な関数オブジェクト以外
    • 空配列で初期値が未指定

// 隣接要素の差分 (戻り値は現在の要素値)
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 例外 (関数不正)