javascript - _.clone 在 lodash 中不起作用?

标签 javascript node.js copy clone lodash

我有

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)

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

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

最佳答案

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

在此处查看引用:https://lodash.com/docs#cloneDeep

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

您可以在这里查看一下: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)

关于javascript - _.clone 在 lodash 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35352285/

相关文章:

javascript - 将项目添加到集合时可以创建项目 ID 吗?

javascript - 同一页面上的 jQuery 重新加载函数导致错误

node.js - nodejs + express + appfog img 资源的不同 session

java - 如何复制hashset和hashmap,Java是否使用指针?

将 Graphite 仪表板复制到另一个 Graphite 仪表板

Java - 包含对原始列表的引用的克隆列表

javascript - react 类没有被导出,我不明白为什么?

javascript - 如何在javascript中合并嵌套对象

node.js - Browserify - bower vs npm Node 模块

javascript - 动态参数页面评估