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

JavaScriptで入力配列の末尾からn個の偶数を抽出して返す方法

問題

数値の配列を第1引数として、数値を第2引数として受け取るJavaScript関数を作成します。

この関数の役割は、入力配列の中から末尾側に近い方からn個の偶数を選び出し、それらを新しい配列として返すことです。たとえば、配列 [1, 2, 3, 4, 5, 6, 7, 8, 9] と数値 3 を渡した場合、期待される結果は [4, 6, 8] になります。

実装例

以下がそのコードです。

const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const num = 3;
const pickEvens = (arr = [], num = 1) => {
    const res = [];
    for(let index = arr.length - 1; index >= 0; index -= 1){
        if (res.length === num){
            break;
        };
        const number = arr[index];
        if (number % 2 === 0){
            res.unshift(number);
        };
    };
    return res;
};
console.log(pickEvens(arr, num));

コードの解説

この実装のポイントは以下の通りです。

  • 配列を末尾(最後の要素)から先頭に向かって逆順にループ処理します。これにより、「後ろから数えてn個分」の偶数だけを効率よく収集できます。
  • 結果配列 res の長さが指定された num に達した時点で break 文によりループを即座に終了します。これにより不要な走査が省かれ、パフォーマンスが向上します。
  • 各要素に対しては剰余演算子(%)を使い、「number % 2 === 0」という条件式で偶数かどうかを判定しています。
  • 偶数が見つかるたびに unshift() メソッドで結果配列の先頭に追加することで、元の配列での並び順(昇順)を保ったまま結果を組み立てられます。

出力

[4, 6, 8]

別のアプローチ:filter() を使う方法

より簡潔に書きたい場合は、filter()slice() を組み合わせる方法もあります。

const pickEvens = (arr = [], num = 1) => {
    return arr.filter(number => number % 2 === 0).slice(-num);
};
console.log(pickEvens([1, 2, 3, 4, 5, 6, 7, 8, 9], 3)); // [4, 6, 8]

この方法は可読性に優れていますが、配列全体を走査するため、データ量が多い場合は最初に紹介した逆順ループ+早期終了の実装の方が効率的です。条件を満たす要素が配列の前方にしか存在しない場合ほど、早期終了のメリットが大きくなります。用途や配列のサイズに応じて使い分けるとよいでしょう。

  1. JavaScriptで有理数(分数)の配列を合計し、最も簡単な形式で結果を返す方法

    問題 「2つの数値を持つ部分配列」をちょうど2つ含む配列を受け取るJavaScript関数を作成する必要があります。各部分配列は、分数形式で表された有理数です。 この関数の役割は、2つの有理数を加算し、その結果を最も簡単な形式(最簡形)で表す2つの数値からなる新しい配列として返すことです。 解法のアプローチ 分数の加算は、以下の手順で行います。 通分する: 2つの分母を掛け合わせて共通の分母を求め、それに合わせて分子も調整します。 分子を加算する: 通分後の分子同士を足し合わせます。 約分する: 最大公約数(GCD)をユークリッドの互除法で求め、分子・分母をそれぞれ割ることで最簡形にしま

  2. JavaScriptで数値配列の移動平均をリアルタイムに計算する方法

    問題 数値の配列を受け取り、各位置における「それまでの要素の累積平均(移動平均)」を格納した新しい配列を構築するJavaScript関数を作成する必要があります。たとえば、次のようになります。 [1, 2, 3, 4, 5] → [1, 1.5, 2, 2.5, 3] 最初の要素は最初の要素単体の平均、2番目の要素は先頭2つの要素の平均、3番目は先頭3つの要素の平均、というように順番に計算していきます。 コード例 以下が実際の実装コードです。 const arr = [1, 2, 3, 4, 5]; const movingAverage = (arr = []) => {