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

Lodash _.set()处理含整数路径异常行为的解决方案问询

行为原因

这是Lodash _.set 的默认设计逻辑,不属于操作错误:当路径片段为可转成正整数的字符串时,Lodash会默认将其识别为数组索引。如果该路径对应的上级节点不存在,会自动创建数组而非普通对象,所以你的代码中wavelength被生成为了长度416的数组,前415项均为null,索引415的位置才是你赋值的foo。

规避方案

方案1:使用_.setWith自定义节点创建逻辑

这是适用场景最广的解决方案,通过_.setWith的第四个参数指定节点创建规则,强制生成普通对象即可避免自动创建数组:

const object = {}
// 第四个参数传入Object,强制路径节点生成普通对象
_.setWith(object, "wavelength.415", "foo", Object);

console.log(JSON.stringify(object))
// 输出结果:{"wavelength":{"415":"foo"}}

数组格式的路径写法也同样适配该方案:

_.setWith(object, ["wavelength", "415"], "foo", Object);

方案2:提前初始化上级节点

如果能提前确认路径的上级结构,可以预先给上级节点赋值为空对象,即可跳过Lodash的自动类型判定逻辑:

// 提前初始化wavelength为普通对象
const object = { wavelength: {} }
_.set(object, "wavelength.415", "foo");

console.log(JSON.stringify(object))
// 输出结果:{"wavelength":{"415":"foo"}}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:18:02