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

ライブラリ関数を使わずに真偽値を含むネスト配列をフラット化する方法 - JavaScript

JavaScriptで、falsenullといった偽値を含むネストされた配列を受け取り、ネストを一切含まない平坦な配列を返す関数を作成する必要があります。

たとえば、入力が次の場合 −

const arr = [[1, 2, 3], [4, 5, [5, false, 6, [5, 8, null]]], [6]];

期待される出力は次のとおりです −

const output = [1, 2, 3, 4, 5, false, 6, 5, 8, null, 6];

実装の考え方

この問題を解くポイントは以下の3つです。

  • 配列の各要素を順番に走査する
  • 要素が配列であれば、その配列に対して再帰的に同じ処理を行い、結果を展開して追加する
  • 配列以外の要素(falsenullを含む)は、そのまま結果に追加する

コード例

以下が実際のコードです −

const arr = [[1, 2, 3], [4, 5, [5, false, 6, [5, 8, null]]], [6]];
const flatten = function(){
    let res = [];
    for(let i = 0; i < this.length; i++){
        if(Array.isArray(this[i])){
            res.push(...this[i].flatten());
        }else{
            res.push(this[i]);
        };
    };
    return res;
};
Array.prototype.flatten = flatten;
console.log(arr.flatten());

コードの解説

このコードでは、flatten関数をArray.prototypeに追加することで、任意の配列からflatten()メソッドを呼び出せるようにしています。ループ内で各要素をチェックし、Array.isArray()によってその要素が配列かどうかを判定します。配列であればスプレッド構文(...)を使って再帰処理の結果を展開しながら追加し、そうでなければ要素をそのままresに追加します。この仕組みにより、どれだけ深くネストしていても配列全体を完全に平坦化できます。

なお、ES2019以降では組み込みメソッドのArray.prototype.flat(Infinity)でも同様のことが可能ですが、本記事のように自前で再帰を実装すれば、古い環境でも動作する汎用的なコードになります。

出力

コンソールには次の出力が表示されます −

[
    1, 2, 3,     4,
    5, 5, false, 6,
    5, 8, null,  6
]
  1. 【JavaScript】配列内のネストされたオブジェクトの値を合計する方法

    この記事では、JavaScriptを使って、配列内にネストされた(入れ子構造の)オブジェクトの値を合計する方法を解説します。サンプルコードでは、JSONデータの複数階層に格納された数値(costNum)を順番に取り出し、その合計をブラウザ上に表示します。 コード例 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=d

  2. JavaScriptでnull・空のオブジェクトを含む配列に値を割り当てる方法

    JavaScriptでは、forEach()メソッドとObject.keys()メソッドを組み合わせることで、nullや空のオブジェクトを含む配列に対して効率的に値を割り当てることができます。本記事では、実際のコード例を交えながら、その具体的な実装方法をわかりやすく解説します。 サンプルコード 以下は、JavaScriptを使用してnull/空のオブジェクトを持つ配列に値を割り当てるコード例です。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&qu