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
相关产品推荐
相关产品推荐

