map内の要素をフィルタしたいときがあって調べました。
解決法
Array.from()
でarrayを生成すると、mapの各要素(entry
と呼ぶ)が以下のようにマッピングされるのでそれを利用する。
- key -> entry[0]
- value -> entry[1]
サンプルコード
const sampleMap = new Map();
sampleMap.set("id1", { name: "name1", hoge: "hoge1" });
sampleMap.set("id2", { name: "name2", hoge: "hoge2" });
sampleMap.set("id3", { name: "name3", hoge: "hoge3" });
const filteredList = Array.from(sampleMap)
.filter((entry) => entry[1].name !== "name1")
.map((entry) => ({
id: entry[0],
name: entry[1].name,
hoge: entry[1].hoge
}));
filteredList.forEach((e) => {
console.log(e.id +' '+ e.name+' '+e.hoge);
});
// id2 name2 hoge2
// id3 name3 hoge3