JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで隣接する要素同士の合計からなる配列を作成する方法

本記事では、数値の配列を受け取り、元の配列から隣り合う2つの要素をペアごとに合計した値を持つ新しい配列を返すJavaScript関数の実装方法を解説します。

例えば、次のような入力配列が与えられた場合を考えてみましょう。

const arr1 = [1, 1, 2, 7, 4, 5, 6, 7, 8, 9];

この場合、期待される出力は以下のとおりです。

const output = [2, 9, 9, 13, 17];

つまり、(1 + 1)、(2 + 7)、(4 + 5)、(6 + 7)、(8 + 9) というように、隣接する要素同士を先頭から順にペアとして合計した結果が得られます。

実装例

この処理を実現するコードは以下のとおりです。

const arr1 = [1, 1, 2, 7, 4, 5, 6, 7, 8, 9];

const consecutiveSum = arr => {
    const res = [];
    for(let i = 0; i < arr.length; i += 2){
        res.push(arr[i] + (arr[i+1] || 0));
    }
    return res;
};

console.log(consecutiveSum(arr1));

出力結果

コンソールには次のように表示されます。

[ 2, 9, 9, 13, 17 ]

コードの仕組み

この関数のロジックを分解して見ていきましょう。

  • 2つずつのループ処理: ループ変数 ii += 2 で増加させることで、配列の要素を「1番目と2番目」「3番目と4番目」というように2個ずつのペアとして扱います。
  • 合計の計算: arr[i] + (arr[i+1] || 0) によって、現在の要素とその次の要素を加算します。|| 0 を付けているのは、配列の長さが奇数の場合に最後の要素がペアを持たなくなるためです。その際 arr[i+1]undefined になりますが、0 が代わりに使われることでエラーを防げます。
  • 結果の格納: 計算した合計は push() メソッドで結果用の配列 res に追加され、ループ完了後にその配列が呼び出し元へ返されます。

別のアプローチ:Array.fromを使った方法

より宣言的なスタイルで書きたい場合は、Array.from() を活用する方法もあります。

const consecutiveSum = arr => {
    return Array.from(
        { length: Math.ceil(arr.length / 2) },
        (_, i) => arr[2 * i] + (arr[2 * i + 1] ?? 0)
    );
};

console.log(consecutiveSum(arr1)); // [ 2, 9, 9, 13, 17 ]

この方法では、結果の要素数(配列の長さを2で割って切り上げた値)だけ新しい配列を生成し、各インデックスに対応するペアの合計を直接計算しています。また、??(Nullish合体演算子)を使うことで、undefinednull の場合のみ 0 に置き換えるという、より厳密なフォールバック処理が可能です。

  1. JavaScriptで配列の要素をすべて奇数に変換する方法

    問題 配列を受け取り、その各要素を次のルールに従って変換するJavaScript関数を作成することを考えます。 数値が奇数の場合 → そのままの値を保持する 数値が偶数の場合 → 1を引いて奇数に変換する そして最後に、変換後の新しい配列を返します。 コード例 以下が実際のコードです。 const arr = [5, 23, 6, 3, 66, 12, 8]; const reduceToOdd = (arr = []) => {     const res = [];     for(let i =

  2. JavaScriptで複数の配列から要素を交互に取り出して1つの配列にまとめる方法

    問題 今回は、任意の個数の配列を引数として受け取り、それらすべての配列から要素を交互に(順番に一つずつ)取り出して、新しい配列を組み立てるJavaScript関数を作成します。 例えば、関数への入力が次のような場合を考えてみましょう。 入力 const arr1 = [1, 2, 3, 4]; const arr2 = [11, 12, 13, 14]; const arr3 = [a, b, c]; 出力 const output = [1, 11, a, 2, 12, b, 3, 13, c, 4, 14]; ご覧のとおり、まず各配列の先頭要素(1、11、a)、次に各配列の2番目の要素(