在node.js中克隆对象的最佳方法是什么
例:我想避免以下情况:
var obj1 = {x: 5, y:5};
var obj2 = obj1;
obj2.x = 6;
console.log(obj1.x); // logs 6
对象很可能包含复杂类型作为属性,所以简单的for(var x in obj1)解决不了问题。我需要自己写一个递归克隆吗?还是有一些我没有看到的内置的东西?
在node.js中克隆对象的最佳方法是什么
例:我想避免以下情况:
var obj1 = {x: 5, y:5};
var obj2 = obj1;
obj2.x = 6;
console.log(obj1.x); // logs 6
对象很可能包含复杂类型作为属性,所以简单的for(var x in obj1)解决不了问题。我需要自己写一个递归克隆吗?还是有一些我没有看到的内置的东西?
当前回答
你也可以使用这个克隆库来深度克隆对象。
npm install --save clone
const clone = require('clone');
const clonedObject = clone(sourceObject);
其他回答
查看underscore.js。它具有克隆和扩展以及许多其他非常有用的功能。
这可能很有用:在Node.js中使用下划线模块
还有另一个库lodash,它有clone和cloneDeep。
Clone将克隆您的对象,但不会为非原语值创建一个新实例,而是使用对原始对象的引用
cloneDeep将在不引用原始对象的情况下创建新的对象,因此当您随后必须更改对象时更安全。
你可以使用JQuery的extend函数:
var newClone= jQuery.extend({}, oldObject);
var deepClone = jQuery.extend(true, {}, oldObject);
还有一个Node.js插件:
https://github.com/shimondoodkin/nodejs-clone-extend
要做到没有JQuery或插件阅读这里:
http://my.opera.com/GreyWyvern/blog/show.dml/1725165
没有一个答案让我满意,一些不工作或只是肤浅的克隆,答案来自@clint-harris和使用JSON。Parse /stringify很好,但是很慢。我找到了一个可以快速进行深度克隆的模块:https://github.com/AlexeyKupershtokh/node-v8-clone
如果你正在使用coffee-script,它就像:
newObject = {}
newObject[key] = value for own key,value of oldObject
虽然这不是一个深度克隆。