使用Lodash查找嵌套对象:获取指定groupId对应的父对象
找到包含特定groupId子对象的父对象
嘿,我来帮你搞定这个问题!首先咱们得先理清你原代码里的问题,再给出可行的解决方案。
原代码的问题
你写的const parentObject= filter(myObject, {[myItems: {groupId: 44}]})有两个关键问题:
- 语法错误:这个对象匹配的写法完全不符合JS或者Lodash的语法规范,键的定义方式不对,也没正确处理嵌套的数组结构。
- 逻辑缺失:
myObject是一个外层数组,每个元素才是包含myItems的父对象,你需要检查每个父对象内部的myItems数组里是否存在group.groupId匹配的子项,而不是直接过滤外层数组。
原生JavaScript实现(无需第三方库)
用原生JS的find(找单个父对象)和some(检查子数组是否有匹配项)就能轻松搞定:
const myObject = [ { "myItems": [ { "id": 1, "group": { "groupId": 33 } }, { "id": 2, "group": { "groupId": 44 } } ] } ]; // 目标groupId const targetGroupId = 44; // 查找符合条件的父对象 const parentObject = myObject.find(parent => parent.myItems.some(item => item.group.groupId === targetGroupId) ); console.log(parentObject); // 输出:{ myItems: [ { id: 1, group: { groupId: 33 } }, { id: 2, group: { groupId: 44 } } ] }
如果可能有多个父对象符合条件,把find换成filter即可,它会返回所有匹配的父对象数组。
Lodash实现方案(如果你习惯用Lodash)
要是你想用Lodash工具库,得用正确的嵌套匹配语法,结合find/filter和some:
const _ = require('lodash'); const myObject = [ { "myItems": [ { "id": 1, "group": { "groupId": 33 } }, { "id": 2, "group": { "groupId": 44 } } ] } ]; const targetGroupId = 44; // 单个父对象用find const parentObject = _.find(myObject, parent => _.some(parent.myItems, ['group.groupId', targetGroupId]) ); // 多个父对象用filter // const parentObjects = _.filter(myObject, parent => // _.some(parent.myItems, ['group.groupId', targetGroupId]) // ); console.log(parentObject);
这里用['group.groupId', targetGroupId]是Lodash里指定嵌套属性匹配的快捷写法,非常方便。
内容的提问来源于stack exchange,提问作者vuvu
相关产品推荐
相关产品推荐

