JS如何从嵌套对象数组中筛选包含指定ID的对象的key列表
嵌套对象数组筛选匹配ID的顶层key实现方案
需求说明
给定目标ID值"12345",需要从嵌套对象集合data中筛选符合以下条件的顶层对象key:
- 顶层对象存在
code数组字段(无该字段的对象直接排除) code数组中至少有一个元素的other.id属性等于目标ID
最终返回所有符合条件的key组成的数组,输出格式示例:["6180571060967405762c1fc2", ...]
代码实现
示例输入结构
// 参考输入的data结构 const data = { "6180571060967405762c1fc2": { name: "示例对象1", code: [ { other: { id: "12345" }, remark: "匹配项" }, { other: { id: "67890" }, remark: "不匹配项" } ] }, "6180571060967405762c1fc3": { name: "示例对象2", // 无code字段,直接排除 }, "6180571060967405762c1fc4": { name: "示例对象3", code: [ { other: { id: "54321" }, remark: "不匹配项" } ] } } const TARGET_ID = "12345";
核心逻辑代码
const matchedKeys = Object.entries(data).filter(([key, value]) => { // 排除无有效code数组的对象 if (!Array.isArray(value.code)) return false; // 检查code数组是否存在匹配ID的元素 return value.code.some(item => item?.other?.id === TARGET_ID); }).map(([key]) => key);
兼容低版本环境写法(不支持可选链?.时使用)
const matchedKeys = Object.entries(data).filter(([key, value]) => { if (!Array.isArray(value.code)) return false; return value.code.some(item => item && item.other && item.other.id === TARGET_ID); }).map(([key]) => key);
输出结果
以上示例输入运行后输出:["6180571060967405762c1fc2"]
内容的提问来源于stack exchange,提问作者WildThing
相关产品推荐
相关产品推荐

