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