map
と filter
メソッドの戻り値について勘違いしていて若干ハマったので、自戒の意味も込めてまとめ。
タイトルにある通り、連想配列から条件に一致するデータの特定のキーのみを取得する方法です。
…文字での説明だけだとわかりにくいですね。
例えば、下記のような連想配列があった時に、type が fruit のデータのみを取り出し、更に取り出したデータの id だけを抜き出して新しく配列を生成したいときに、今回の方法を使います。
const foods = [ {id: "1", name: "りんご", type: 'fruit'}, {id: "2", name: "ピーマン", type: 'vegetables'}, {id: "3", name: "みかん", type: 'fruit'}, {id: "4", name: "にんじん", type: 'vegetables'}, {id: "5", name: "ナス", type: 'vegetables'}, ];
さて、手順ですが、まず filter
メソッドを使って、type が fruit のデータのみを抜き出します。
let fruits = foods.filter(fruit => fruit["type"] === 'fruit');
上記を実行すると、下記のような変数が作られます。
const fruits = [ {id: "1", name: "りんご", type: 'fruit'}, {id: "3", name: "みかん", type: 'fruit'}, ];
あとはこの変数から、map
メソッドを使って、id のみを抜き出します。
const result = fruits.map(function(value) { return value["id"]; });
こちらを実行して得られるデータはこちら。
const result = ["1", "3"];
欲しいデータが無事に取得できました!
処理としてはこれだけなのですが、久しぶりに使ったせいで、この一連の動作を map メソッドだけでできると勘違いしてしまい…。
配列は取得できたのですが、条件に一致しないデータがあるところに undefined が代入されてしまい、それの対処に追われる羽目になりました。
…意図しない動作が起こった場合は、一度そのメソッドを調べる、というのを心がけたいと思います。
以上、JavaScript で連想配列から条件に一致するデータの特定のキーのみを取得する方法でした。
ご参考になれば幸いです。