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

如何移除旧项目中的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 04:33:26