Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript _.lodash中的克隆不起作用?_Javascript_Node.js_Copy_Clone_Lodash - Fatal编程技术网

Javascript _.lodash中的克隆不起作用?

Javascript _.lodash中的克隆不起作用?,javascript,node.js,copy,clone,lodash,Javascript,Node.js,Copy,Clone,Lodash,我有 现在config.default\u req.data等于'bar',为什么?我认为使用lodash进行克隆应该只是复制对象,失去与原始对象的任何链接 知道如何在node.js中真正克隆/复制对象吗?(v.0.10.40) 编辑: 对于那些将要回答此问题的人,一个简单的克隆/复制功能: config.default_req = { foo: 'foo' } this.default_req = _.clone(config.default_req); this.default_req.bo

我有

现在
config.default\u req.data
等于'bar',为什么?我认为使用lodash进行克隆应该只是复制对象,失去与原始对象的任何链接

知道如何在node.js中真正克隆/复制对象吗?(v.0.10.40)

编辑: 对于那些将要回答此问题的人,一个简单的克隆/复制功能:

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

这是因为克隆是浅拷贝。您应该使用
cloneDeep

请检查此处的参考:

浅复制将仅复制对象每个属性上的数据。因此数组和对象是通过引用传递的。浅拷贝相对较快。另一方面,深度副本递归地沿着树向下移动,因此对象和数组是新实例。深度拷贝的速度相对较慢,所以除非需要,否则不要使用它们

您可以在这里查看小提琴:

尝试使用以下内容:

var clone = function(source){
    return JSON.parse(JSON.stringify(source));
};
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)