如何结合filter与map方法筛选指定配件的对象并提取名称?
筛选并提取数组对象指定字段
先看给定的对象数组:
let input = [ { "metadata": { "id": 1071, "name": "USA" }, "accesories": [ { "name": "steel" } ] }, { "metadata": { "id": 1068, "name": "China" }, "accesories": [ { "name": "electronics" } ] }, ]
使用input.map((el) => el?.metadata?.name)可以直接提取所有metadata.name,得到输出:
["USA", "China"]
现在需要先根据accesories中的name筛选对象,再提取对应metadata.name——比如筛选steel时输出["USA"],筛选electronics时输出["China"],可以通过先filter筛选,再map提取的方式实现:
实现代码
// 定义要筛选的配件名称 const targetAccessory = "steel"; // 先筛选符合条件的对象,再提取metadata.name const result = input .filter(el => el?.accesories?.some(item => item?.name === targetAccessory)) .map(el => el?.metadata?.name); console.log(result); // 输出 ["USA"]
代码说明
filter阶段:使用some方法遍历accesories数组,判断是否存在name等于目标值的元素,只保留符合条件的对象。map阶段:对筛选后的对象数组,提取每个对象的metadata.name字段,得到最终结果。
如果要筛选electronics,只需要修改targetAccessory的值为"electronics"即可,输出会是["China"]。
内容的提问来源于stack exchange,提问作者Aren Trot
相关产品推荐
相关产品推荐

