将 javascript 对象分配给新对象作为副本

Assigning javascript object to new object as copy

我在 javascript 中有这个对象数组 obj.arr。 我把它分配给了一个新对象。

var obj_arr_new = obj.arr;

问题是当我修改 obj_arr_new 时,obj.arr 也被修改了。我不要那个。我怎样才能使 obj_arr_new 成为 obj.arr 的副本,并且当我修改 obj_arr_new 时,obj.arr 保持不变?

我正在使用 node.js v6。我愿意使用任何 node.js 模块。有人告诉我 lodash 可以胜任这项工作。使用 lodash 的答案会有所帮助。

Lodash 确实有一个 _.cloneDeep(value) 用于此目的。

var obj_arr_new = _.cloneDeep(obj.arr);

它会递归地克隆 "arrays, array buffers, booleans, date objects, maps, numbers, Object objects, regexes, sets, strings, symbols, and typed arrays" 以便修改克隆的位不会影响原始的,反之亦然。

Documentation

我倾向于使用以下方式创建副本:

var copiedObject = JSON.parse(JSON.stringify(originalObject));

这仅适用于 JSONable 对象,但如果您处理的是字符串、数组等,那么它没问题,即如果您有函数作为您正在复制的对象的子对象,则不行。