連想配列の中の連想配列から条件に合うものだけ抽出する方法
連想配列の中の連想配列から条件に合うものだけ抽出する方法:
初 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", 省略 }];
初めての投稿なのでご意見くださると嬉しいです!
「もっといいやり方あるよ〜」や、
「ここで書くと読みやすいよ〜」などなど!
コメント
コメントを投稿