You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Lodash查找嵌套对象:获取指定groupId对应的父对象

找到包含特定groupId子对象的父对象

嘿,我来帮你搞定这个问题!首先咱们得先理清你原代码里的问题,再给出可行的解决方案。

原代码的问题

你写的const parentObject= filter(myObject, {[myItems: {groupId: 44}]})有两个关键问题:

  1. 语法错误:这个对象匹配的写法完全不符合JS或者Lodash的语法规范,键的定义方式不对,也没正确处理嵌套的数组结构。
  2. 逻辑缺失: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:34:45