在lodash _.clone不工作?

我有

config.default_req = { foo: 'foo' } this.default_req = _.clone(config.default_req); this.default_req.body.data = 'bar'; 

现在config.default_req.data等于'bar',为什么呢?我以为用lodash克隆应该只是复制对象,失去了原来的链接!

任何想法如何克隆/复制node.js中的对象? (v.0.10.40)

编辑:对于那些会得到这个问题,一个简单的克隆/复制function:

 var clone = function(source){ return JSON.parse(JSON.stringify(source)); }; 

Solutions Collecting From Web of "在lodash _.clone不工作?"

这是因为clone是浅拷贝。 你应该使用cloneDeep

检查参考这里: https : //lodash.com/docs#cloneDeep

浅拷贝将只复制对象的每个属性上的数据。 所以数组和对象通过引用传递。 浅拷贝相对较快。 另一方面,深层副本recursion地下到树上,所以对象和数组是新的实例。 深拷贝比较慢,所以除非需要,否则不要使用它们。

你可以在这里查一下: https : //jsfiddle.net/qqnved24/2/

尝试使用以下内容:

 var myObj = { arr: [1, 2, 3], obj: { first: 'foo' } } var myDeepClone = _.cloneDeep(myObj) var myShallowClone = _.clone(myObj) //Should ONLY change array slot 1 on my Clone myDeepClone.arr[1] = 99 console.log(' ==== Checking Deep Clone Array ==== ') console.log(myObj) console.log(' -- Deep Clone Below --'); console.log(myDeepClone) console.log('\n\n') // Danger: Will change the 'first' property on both the shallow copy and the original myShallowClone.obj.first = 'bar'; console.log(' ==== Checking Shallow Clone Obj ==== ') console.log(myObj) console.log(' -- Shallow Clone Below --'); console.log(myShallowClone); console.log('\n\n') // Should only change the 'first property' on the Deep Cloned Obj myDeepClone.obj.first= 'myObj'; console.log(' ==== Checking Deep Clone Obj ==== ') console.log(myObj) console.log(' -- Deep Clone Below --'); console.log(myDeepClone) console.log('\n\n') // Danger will alter Shallow clones OBJ myObj.obj.meaningOfLife = 42; console.log(' ==== Mutating Original Obj ==== ') console.log(myObj) console.log(' -- Shallow Clone Below --'); console.log(myShallowClone) console.log(' -- Deep Clone Below --'); console.log(myDeepClone)