将 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" 以便修改克隆的位不会影响原始的,反之亦然。
我倾向于使用以下方式创建副本:
var copiedObject = JSON.parse(JSON.stringify(originalObject));
这仅适用于 JSONable 对象,但如果您处理的是字符串、数组等,那么它没问题,即如果您有函数作为您正在复制的对象的子对象,则不行。
我在 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" 以便修改克隆的位不会影响原始的,反之亦然。
我倾向于使用以下方式创建副本:
var copiedObject = JSON.parse(JSON.stringify(originalObject));
这仅适用于 JSONable 对象,但如果您处理的是字符串、数组等,那么它没问题,即如果您有函数作为您正在复制的对象的子对象,则不行。