如何移除旧项目中的Lodash并改写_.find(x, ['y', z])语法
Lodash
_.find(x, ['y', z]) 原生改写方案 你写的原生写法和原Lodash代码不等价。
原Lodash语法的真实逻辑
当_.find的第二个参数传入长度为2的数组时,是Lodash内置的_.matchesProperty断言简写,作用是:
- 遍历集合
x - 返回第一个
y属性的值严格等于z的元素
它等价于Lodash的完整写法:
_.find(x, function(item) { return item.y === z })
你写的原生代码的问题
你给出的代码:
x.find( (e) => (e.y === y && e.z === z))
逻辑是匹配「e.y等于变量y、且e.z等于变量z」的元素,属于多属性同时匹配,和原代码的单属性匹配逻辑完全不符。
正确的原生JS改写
和原Lodash行为完全一致的原生写法为:
// 带空值兼容,和Lodash默认的空值安全逻辑对齐,避免遍历到null/undefined元素时报错 x.find(e => e?.y === z)
如果你可以100%确定集合x里的所有元素都是非空对象,也可以简化为:
x.find(e => e.y === z)
补充:同类Lodash数组匹配规则参考
迁移其他同类代码时可以对照:
- 数组长度为2:
[属性名, 匹配值],匹配对象的单个属性等于指定值,即本次遇到的场景 - 数组长度大于2:比如
['a', 'b', 'targetVal'],匹配嵌套属性,对应原生写法为x.find(e => e?.a?.b === targetVal) - 如果是多属性同时匹配,Lodash会传入对象作为参数,比如
_.find(x, {y: val1, z: val2}),这种场景的原生改写才是多条件&&判断的形式。
内容的提问来源于stack exchange,提问作者user12835700
相关产品推荐
相关产品推荐

