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

