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

Lodash合并操作修改源对象?引发无限递归问题解析

问题原因及解决方法

核心原因

Lodash的_.merge方法会直接修改第一个传入的对象,而非返回全新对象。你的代码里:

const obj2 = _.merge(obj1, {
  get: (id) => id ? 'hello from obj2' : obj1.get()
})

执行_.merge后,obj1的get方法已经被替换成了你传入的新函数,而obj2其实是obj1的引用(二者指向同一内存地址)。

当调用obj2.get()时,进入分支执行obj1.get(),但此时obj1.get()就是当前这个新函数本身,于是触发无限递归。

解决方法

让_.merge生成新对象,不要修改原obj1,只需传入空对象作为第一个参数:

const _ = require('lodash')

const obj1 = {
  get: () => 'hello from obj1'
}
const obj2 = _.merge({}, obj1, {
  get: (id) => id ? 'hello from obj2' : obj1.get()
})
console.assert(obj2.get() === 'hello from obj1') // 正常执行
console.log(obj2.get(3)) // 输出hello from obj2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:52:12