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

如何使用lodash npm包过滤以ID为键的嵌套对象

嘿,我来帮你搞定这个Lodash过滤的问题!首先咱们先明确下你说的对象结构,我猜大概是这种样子的(如果和你的实际结构有出入,直接调整就行):

const userData = {
  'u_1001': { name: 'Luna', role: 'admin', active: true },
  'u_1002': { name: 'Leo', role: 'editor', active: false },
  'u_1003': { name: 'Mia', role: 'viewer', active: true }
};

下面分几种常见的过滤场景,给你对应的Lodash实现方案:

1. 根据子对象的属性过滤

如果想筛选出满足特定属性条件的子对象(比如上面例子里的active: true的用户),用_.pickBy就最合适了——它会遍历对象的每个键值对,保留回调函数返回true的项,而且返回的还是原结构的对象:

const _ = require('lodash');

// 筛选出激活状态的用户
const activeUsers = _.pickBy(userData, (user) => user.active);
console.log(activeUsers);
// 输出: { 'u_1001': { name: 'Luna', role: 'admin', active: true }, 'u_1003': { name: 'Mia', role: 'viewer', active: true } }

要是你需要更复杂的条件,比如筛选角色是admin且激活的用户,直接在回调里加判断就行:

const adminActiveUsers = _.pickBy(userData, (user) => user.role === 'admin' && user.active);

2. 根据ID(对象的键)过滤

保留指定ID的子对象

如果已经有明确的ID列表,要只保留这些ID对应的子对象,用_.pick一步到位:

const targetIds = ['u_1001', 'u_1002'];
const targetUsers = _.pick(userData, targetIds);
console.log(targetUsers);
// 输出: { 'u_1001': { name: 'Luna', role: 'admin', active: true }, 'u_1002': { name: 'Leo', role: 'editor', active: false } }

排除指定ID的子对象

反过来,要是想去掉某些ID的子对象,用_.omit就好:

const excludeIds = ['u_1002'];
const remainingUsers = _.omit(userData, excludeIds);
console.log(remainingUsers);
// 输出: { 'u_1001': { name: 'Luna', role: 'admin', active: true }, 'u_1003': { name: 'Mia', role: 'viewer', active: true } }

按ID的规则过滤

如果是要根据ID本身的规则筛选(比如ID以u_100开头),还是用_.pickBy,只不过回调里要同时用到键(ID)和值:

const filteredByIdRule = _.pickBy(userData, (user, userId) => userId.startsWith('u_100'));
// 或者筛选ID包含'01'的用户
const filteredByIdContains = _.pickBy(userData, (user, userId) => userId.includes('01'));

小总结

根据你的实际需求选对应的方法就行:

  • 按子对象属性筛选 → _.pickBy(回调关注value)
  • 精准保留/排除指定ID → _.pick / _.omit
  • 按ID规则筛选 → _.pickBy(回调关注key)

内容的提问来源于stack exchange,提问作者Bayram

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 22:02:43