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

JavaScriptでネストされた配列から最も短いサブ配列を取得する方法

はじめに

例えば、次のようなネストされた配列(配列の中に複数の配列が格納されている構造)があるとします。

const arr = [
    ["LEFT", "RIGHT", "RIGHT", "BOTTOM", "TOP"],
    ["RIGHT", "LEFT", "TOP"],
    ["TOP", "LEFT"]
];

ここで求められているのは、このような配列を引数として受け取り、その中から要素数が最も少ないサブ配列(含まれる要素の個数という意味での「最小」)を選び出して返すJavaScript関数を作成することです。

実装コード

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

const arr = [
    ["LEFT", "RIGHT", "RIGHT", "BOTTOM", "TOP"],
    ["RIGHT", "LEFT", "TOP"],
    ["TOP", "LEFT"]
];
const findShortest = (arr = []) => {
    const res = arr.reduce((acc, val, ind) => {
       if (!ind || val.length < acc[0].length) {
          return [val];
       };
       if (val.length === acc[0].length) {
          acc.push(val);
       };
       return acc;
   }, []);
   return res;
};
console.log(findShortest(arr));

コードの解説

この関数ではreduce()メソッドを使って、配列を先頭から順番に走査しています。処理の流れは以下のとおりです。

1. 最初の要素またはより短い配列が見つかった場合: インデックスが0(!ind)のとき、つまり最初の要素のとき、または現在のサブ配列の長さがそれまでの最短記録(acc[0].length)より短い場合は、結果を現在のサブ配列だけを持つ新しい配列[val]で置き換えます。

2. 同じ長さの配列が見つかった場合: 現在のサブ配列の長さが最短記録と同じ場合は、そのサブ配列を結果に追加(acc.push(val))します。これにより、最短の長さを持つ複数のサブ配列すべてを取得できます。

3. 初期値: reduce()の初期値として空配列[]を渡しているため、元の配列が空の場合でもエラーにならず、空の結果が返されます。

出力結果

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

[ [ 'TOP', 'LEFT' ] ]

この例では、3つのサブ配列の中で["TOP", "LEFT"]が要素数2と最も短いため、これが結果として返されています。

  1. JavaScriptのArray.from()メソッドとは?使い方と実例をわかりやすく解説

    Array.from()メソッドは、配列風オブジェクト(array-like)や反復可能オブジェクト(iterable)から、新しい配列オブジェクトを作成するための便利なメソッドです。文字列、Map、Set、NodeListなど、さまざまなデータを手軽に配列へ変換できます。 Array.from()の基本的な動作 例えば、文字列「HelloWorld」に対してArray.from()を使用すると、1文字ずつ分割された新しい配列が生成されます。以下に実際のコード例を示します。 サンプルコード <!DOCTYPE html> <html lang="ja"&g

  2. JavaScriptでURLからGETパラメータの値を取得する方法

    JavaScriptでは、URLオブジェクトとsearchParamsプロパティを組み合わせることで、URLに含まれるGETパラメータ(クエリ文字列)の値を簡単に取得できます。本記事では、実際のコード例とともにその手順をわかりやすく解説します。 実装例 以下は、サンプルURL「https://www.google.com?imageSize=440&color=blue」から、imageSizeとcolorという2つのGETパラメータの値を取り出して画面に表示するコード例です。 <!DOCTYPE html> <html lang=ja> <head>