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

【JavaScript】reduce()メソッドを使って配列を正の数と負の数に分離する方法

JavaScriptでは、配列を受け取って、その中身を「正の数」と「負の数」に振り分けた2つの配列を持つオブジェクトを返す関数を作成することが求められるケースがあります。

本記事では、Array.prototype.reduce() メソッドを活用して、条件に合致する要素を選び出し、2つの配列を持つオブジェクトに格納していく実装方法を解説します。

実装の考え方

reduce() メソッドは、配列の各要素に対してコールバック関数を実行し、単一の値(今回はオブジェクト)へと集約できます。初期値として { positive: [], negative: [] } を用意し、各要素が0未満かどうかを判定しながら、対応する配列へ push() していきます。

サンプルコード

実際のコードは以下の通りです。

const arr = [97, -108, 13, -12, 133, -887, 32, -15, 33, -77];

const splitArray = (arr) => {
    return arr.reduce((acc, val) => {
        if (val < 0) {
            acc['negative'].push(val);
        } else {
            acc['positive'].push(val);
        }
        return acc;
    }, {
        positive: [],
        negative: []
    });
};

console.log(splitArray(arr));

実行結果

コンソールには以下のように出力されます。

{
  positive: [97, 13, 133, 32, 33],
  negative: [-108, -12, -887, -15, -77]
}

このように、元の配列から正の数だけが positive 配列へ、負の数だけが negative 配列へそれぞれ分離されていることが確認できます。なお、この実装では 0(ゼロ)は正の数として扱われる 点にも注意してください。もし0を別扱いしたい場合は、判定条件を調整することで柔軟に対応可能です。

  1. JavaScriptにおける配列とSetの違いとは?重複値の扱いと要素アクセスをわかりやすく解説

    JavaScriptのSet(セット)オブジェクトは、ES2015(ES6)で新たに導入されたデータ型です。従来から広く使われている配列(Array)と比べると、いくつか重要な違いがあります。 配列とSetの主な違い 重複した値の扱い: 配列は同じ値をいくつでも格納できますが、Setでは同一の値は1つしか保持されません。重複した値は自動的に除外されるのが大きな特徴です。 要素へのアクセス方法: 配列ではインデックス(例:arr[0])を使って任意の位置の要素へ直接アクセスできます。一方、Setにはインデックスの概念がなく、要素は挿入された順序どおりに先頭から順番に辿ることしかできません。

  2. JavaScriptでサブオブジェクトや配列を含むオブジェクトをインポートする方法

    はじめに JavaScriptでは、ESモジュール(import / export)の仕組みを利用することで、別ファイルに定義したオブジェクトを簡単に読み込めます。オブジェクトの中にサブオブジェクト(ネストされたオブジェクト)や配列が含まれていても、そのままインポートして扱うことができます。以下に具体的なコード例を示します。 コード例 index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta na