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

JavaScriptで配列を再帰的に走査し、奇数と偶数を別々の変数に振り分ける方法

概要

本記事では、数値の配列を受け取り、奇数と偶数をそれぞれ別の配列に振り分けたオブジェクトを返す再帰関数「pushRecursively()」の実装方法を解説します。最大のポイントは、for文やforEachなどのループ処理を一切使わず、再帰呼び出しだけで処理を完結させるところです。

コード例

まずは実際のコードを見てみましょう。

const arr = [12, 4365, 76, 43, 76, 98, 5, 31, 4];
const pushRecursively = (arr, len = 0, odd = [], even = []) => {
    if (len < arr.length) {
        arr[len] % 2 === 0 ? even.push(arr[len]) : odd.push(arr[len]);
        return pushRecursively(arr, ++len, odd, even);
    }
    return {
        odd,
        even
   &;}
};
console.log(pushRecursively(arr));

仕組みの解説

この関数は合計4つの引数を受け取ります。第1引数は対象となる配列、第2引数のlenは現在処理中のインデックス(初期値は0)、第3引数のoddと第4引数のevenは、それぞれ奇数・偶数を格納するための配列です。

lenが配列の長さに達するまで、以下の処理を繰り返します。

  • 現在の要素を2で割った余りが0であれば偶数としてeven配列へ、それ以外は奇数としてodd配列へプッシュする
  • lenを1つ増やし、自分自身を再帰的に呼び出して次の要素へ進む

こうして各要素が順番に判定されていき、lenが配列の長さと一致した時点で再帰が終了します。最終的に、oddプロパティとevenプロパティを持つオブジェクトが返される仕組みです。

出力結果

上記のコードをコンソールで実行すると、次のような出力が得られます。

{ odd: [ 4365, 43, 5, 31 ], even: [ 12, 76, 76, 98, 4 ] }

入力配列から奇数だけが集められた配列と、偶数だけが集められた配列が、ひとつのオブジェクトとしてきれいに分類されていることが確認できます。

  1. 【JavaScript】変数が配列かどうか判定する3つの方法(isArray・instanceof・constructor)

    JavaScriptでは、ある変数が配列(Array)であるかどうかを判定したい場面はよくあります。本記事では、代表的な3つの判定方法を、サンプルコードと出力結果付きでわかりやすく解説します。 1)Array.isArray() メソッド Array.isArray() メソッドは、引数として渡された変数が配列かどうかをチェックします。変数が配列であれば true を返し、そうでなければ false を返します。ES5以降で利用できる標準メソッドであり、現在最も推奨されている判定方法です。 構文 Array.isArray(variableName) 例 <html> <

  2. JavaScriptのfind()関数とは?配列から条件に合う最初の要素を取得する方法

    JavaScriptのfind()メソッドは、配列の中から指定した条件を満たす最初の要素の値を返すために使用されます。条件を満たす要素がひとつも存在しない場合は、undefinedが返されます。find()は配列全体を走査しますが、条件に一致する要素が見つかった時点で処理を終了するため、効率的に目的の要素を取得できるのが特徴です。find()の基本構文array.find(function(val, index, arr), thisValue)パラメータの説明function:各要素に対して実行されるテスト関数val:現在処理中の要素の値(必須)index:現在処理中の要素のインデックス番号