💡

JavaScriptの配列抽出

2024/06/02に公開

配列の中から条件を満たしたモノから必要な要素のみを取る。
そんな方法を調べたのでメモ。

古の方法

取得元配列をループしてifで取り出して抽出結果配列にPush。

const newArray = [];
for (let elm of objArray) {
  if (elm.id % 2 === 1) {
    newArray.push({"name":elm.name, "value":elm.value});
  }
}

filterとmapを使う方法

スッキリした表記(諸説あります)になる。

要素1つのみ取得して配列にする場合
const newArray = objArray.filter(elm => elm.id % 2 === 1).map(elm => elm.name));
必要な要素のみ取得してオブジェクト配列にする場合
const newArray = objArray.filter(elm => elm.id % 2 === 1).map(elm => ({"num":elm.id, "val":elm.name});

解説

filter

抽出条件を指定する。
クロージャ(無名関数)の引数にfilter対象配列の要素が入る。
省略しなければ要素の位置、配列そのもの、も入る。
(要素, インデックス, 配列)
クロージャの戻り値がtrue扱いになるモノだけ抽出される。

map

出力を指定する。
戻り値の形の配列が生成される。

補足

どちらもシャローコピーが生成される。
ディープコピーが必要かも考える。

蛇足

元配列がDBから取得した値ならSQLを直した方が…
元配列を生成する場所を触る事ができないから…
という場合のその場しのぎに使えるが、技術負債だよね。

Discussion