連想配列の中の連想配列から条件に合うものだけ抽出する方法
連想配列の中の連想配列から条件に合うものだけ抽出する方法:
初 Qiita 投稿です!
以下のような JSON データがあるとします。
(ほしい結果 → "hanako"と"ichiro"をゲッチュしたい)
(2018/12/16 20:32追記)
コメントでスマートなやり方を教えていただきました!ありがとうございます!!
コメントをいただく前に記載していたもの↓
初めての投稿なのでご意見くださると嬉しいです!
「もっといいやり方あるよ〜」や、
「ここで書くと読みやすいよ〜」などなど!
初 Qiita 投稿です!
以下のような JSON データがあるとします。
orange
をもつ人物のみを抽出して新しい配列をつくりたい、という場合。(ほしい結果 → "hanako"と"ichiro"をゲッチュしたい)
const hogehoge = [ { name: "hanako", items: [ { id: 1, type: "melon" }, { id: 2, type: "orange" }, { id: 3, type:"apple" } ] }, { name: "taro", items: [ { id: 6, type: "banana" }, { id: 7, type: "strawberry" } ] }, { name: "ichiro", items: [ { id: 10, type: "orange" }, { id: 14, type: "peach" } ] } ];
コメントでスマートなやり方を教えていただきました!ありがとうございます!!
Array.prototype.filter
と Array.prototype.find
の合わせ技です。const target_hoge = hogehoge.filter(({items}) => items.find(({type}) => type === "orange") !== undefined); console.log(target_hoge); // [{ name: "hanako", items:[省略] }, { name: "ichiro", 省略 }];
Array.prototype.find
を2回使うというやり方で対応していました。const target_hoge = hogehoge.filter(hoge => { const target_item = hoge.items.filter(item => item.type === "orange"); return target_item.length > 0; } ); console.log(target_hoge); // [{ name: "hanako", items:[省略] }, { name: "ichiro", 省略 }];
初めての投稿なのでご意見くださると嬉しいです!
「もっといいやり方あるよ〜」や、
「ここで書くと読みやすいよ〜」などなど!
コメント
コメントを投稿