如何在嵌套对象的数组中按名称查找指定元素?
在嵌套对象数组中查找指定元素
针对你给出的嵌套结构,有两种简洁的方法可以找到名称为"D"的crew元素:
方法一:展开数组后查找
利用flatMap将所有crew数组展开成一维数组,再用find匹配目标元素:
const data = [ { _id: 1, crew: [ { name: "A", price: "5" }, { name: "B", price: "10" } ] }, { _id: 2, crew: [ { name: "C", price: "15" }, { name: "D", price: "20" } ] } ]; // 查找名称为"D"的crew成员 const targetMember = data.flatMap(item => item.crew).find(member => member.name === "D"); console.log(targetMember); // 输出:{ name: "D", price: "20" }
方法二:嵌套查找
先定位包含目标成员的父对象,再在其crew数组中查找:
// 先找到包含目标成员的父项 const parentItem = data.find(item => item.crew.some(member => member.name === "D")); // 再从父项的crew数组中取出目标成员 const targetMember = parentItem?.crew.find(member => member.name === "D");
这种方法适合需要保留父对象关联信息的场景,?.可选链操作符可以避免找不到父对象时出现报错。
注意事项
- 如果不存在匹配的元素,两种方法都会返回
undefined,可以根据需求添加默认值处理。 - 如果有多个同名成员,
find只会返回第一个匹配的元素,若要获取所有匹配项,可将find替换为filter。
内容的提问来源于stack exchange,提问作者Khalid
相关产品推荐
相关产品推荐

