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

如何过滤对象获取符合条件的ID数组?含Lodash方案咨询

解决方案:过滤对象并返回符合条件的ID数组

嘿,这个需求太典型了——咱们都知道Array.prototype.filter是数组专属的方法,但你这里的entities是个以ID为键的普通对象,直接用肯定不行。不过不管用不用工具库,都有很顺手的实现方式,我给你拆解一下:

原生JavaScript实现(无需额外依赖)

完全不用引入任何库,用原生API就能搞定,核心思路是先把对象的键转成数组,再过滤筛选:

const entities = { 1: {'name': 'Fred', 'age': 35}, 2: {'name': 'Hans', 'age': 47}, 3: {'name': 'Bert', 'age': 27} };

// 步骤分解:
// 1. 拿到所有对象键的数组(默认是字符串类型)
// 2. 过滤出对应age>30的键
// 3. 可选:把字符串ID转成数字类型
const ids = Object.keys(entities)
  .filter(id => entities[id].age > 30)
  .map(Number);

console.log(ids); // 输出:[1, 2]

如果不需要数字类型的ID,去掉最后的.map(Number)就行,会得到['1', '2']这样的字符串数组。

使用Lodash的便捷实现

如果你已经在用Lodash,那有几种更简洁的写法,可读性也很高:

写法一:用_.pickBy先筛选对象,再取键

这种方式逻辑最直观:先挑出所有age>30的对象,再提取它们的ID:

const filteredEntities = _.pickBy(entities, person => person.age > 30);
const ids = _.keys(filteredEntities).map(Number);

写法二:直接组合_.keys和_.filter

和原生写法思路类似,只是用Lodash的函数替代原生API:

const ids = _.filter(_.keys(entities), id => entities[id].age > 30).map(Number);

写法三:用_.entries解构处理

如果想一次性拿到ID和对应对象,可以用_.entries把对象转成[键, 值]的数组,再过滤提取:

const ids = _.map(
  _.filter(_.entries(entities), ([id, person]) => person.age > 30),
  ([id]) => Number(id)
);

不管哪种写法,最终都能得到你想要的[1, 2]数组~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:06:36