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

