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

为什么lodash的_.filter使用_.partialRight构造的函数不生效?

问题原因

核心问题出在_.filter的参数传递规则和_.partialRight的参数拼接逻辑不匹配:

  • _.filter调用自定义迭代函数时,会固定传入3个参数:当前遍历的元素、当前索引值、被遍历的原数组
  • 你通过_.partialRight(firstNameStartsWith, "J")生成的新函数,被调用时会先接收_.filter传的3个参数,再追加你预先绑定的"J",最终传给firstNameStartsWith的实参列表是(student, index, students数组, "J")
  • 你定义的firstNameStartsWith只有2个形参,第二个形参letter实际拿到的是索引数字(0/1/2),和"J"完全不匹配,所以所有判断都返回false,最终得到空数组。

箭头函数版本能正常运行,是因为你主动只把第一个遍历元素传给firstNameStartsWith,第二个参数手动指定为"J",直接忽略了_.filter传的索引和原数组参数,刚好符合你的业务逻辑预期。

修复方案

如果要继续使用_.partialRight实现需求,可以用_.ary限制迭代函数只接收1个参数,过滤掉多余的索引和数组参数:

_.filter(students, _.ary(_.partialRight(firstNameStartsWith, "J"), 1));

也可以用lodash的占位符明确参数绑定位置,避免多余参数干扰:

_.filter(students, _.partialRight(firstNameStartsWith, "J", _));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:48:01