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

Lodash pickBy传入对象字面量的用法溯源及原理问询

Lodash _.pickBy传入对象字面量:生效原因与起源

生效原因

_.pickBy的第二个参数并非只能传自定义布尔断言函数——Lodash内部做了参数兼容处理:当你传入对象字面量时,它会自动调用内部的_.matches函数,把这个对象转换成一个匹配断言。

这个生成的断言函数会逐个检查目标集合中的元素,判断元素是否包含传入对象的所有键值对,符合条件的元素才会被保留。

对应你的示例:

const Animals = [
  {Name: 'Dog', Id: 0},
  {Name: 'Cat', Id: 1},
  {Name: 'Mouse', Id: 2},
  {Name: 'Horse', Id: 3},
  {Name: 'Pig', Id: 3}
];
const Indexes = _.keys(_.pickBy(Animals, {Id: 3}));

{Id: 3}被转为断言后,会筛选出数组中Id等于3的两个元素(原数组索引3、4),再通过_.keys提取这些元素的索引键,最终得到["3", "4"]。

用法起源

这个是Lodash早期版本就内置的语法糖,源于社区对“筛选特定键值对对象”这个高频场景的需求——手动写(item) => item.Id === 3这类断言太繁琐,Lodash直接封装了对象转匹配断言的逻辑。

虽然4.17.15版本的官方文档没明确记录这个用法,但它从3.x版本就存在,一直被保留到后续版本,慢慢成了开发者之间的惯用写法。

内容的提问来源于stack exchange,提问作者Marcus Junius Brutus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:25:23