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

为何Lodash的map方法在隐式链式调用中无法正常工作?

Lodash隐式链式调用与显式链式调用的差异问题

问题重现

给定对象:

let obj = { mytest: [{ mytest2: 123 }] }

尝试使用Lodash隐式链式调用:

_(obj).get('mytest').map('mytest2').value();

执行后抛出错误:

VM922:1 Uncaught TypeError: mytest2 is not a function
    at Array.map (<anonymous>)
    at <anonymous>:1:22
(anonymous) @ VM922:1

而使用显式链式调用则正常输出结果:

_.chain(obj).get('mytest').map('mytest2').value();
// 输出: [123]

疑问:为什么两种链式调用的结果不同?使用的是Lodash 4.17.15版本。

原因解释

  • 隐式链式调用(_(obj))的特性:当调用get('mytest')时,方法返回的是原始JS数组[{ mytest2: 123 }],而非Lodash包装对象。此时后续的.map('mytest2')调用的是原生JS数组的map方法,原生map要求参数必须是函数,传入字符串'mytest2'不符合要求,因此抛出类型错误。
  • 显式链式调用(_.chain(obj))的特性:_.chain会将目标对象包裹成Lodash链式包装对象,后续所有方法调用(包括get、map)都会维持这个包装状态。Lodash的map方法支持传入字符串作为属性名,自动提取数组中每个对象的对应属性值,因此能正常得到预期结果。

核心差异在于:隐式链在方法返回原始值时会自动解包,而显式链会全程保持包装状态,直到调用value()才最终解包获取结果。

内容的提问来源于stack exchange,提问作者Doug Molineux

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 13:45:30