在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)解决不了问题。我需要自己写一个递归克隆吗?还是有一些我没有看到的内置的东西?


当前回答

在Github上也有一个项目,旨在成为jQuery.extend()的更直接的端口:

https://github.com/dreamerslab/node.extend

下面是一个例子,来自jQuery文档:

var extend = require('node.extend');

var object1 = {
    apple: 0,
    banana: {
        weight: 52,
        price: 100
    },
    cherry: 97
};

var object2 = {
    banana: {
        price: 200
    },
    durian: 100
};

var merged = extend(object1, object2);

其他回答

如果你正在使用coffee-script,它就像:

newObject = {}
newObject[key] = value  for own key,value of oldObject

虽然这不是一个深度克隆。

另一个解决方案是直接封装在新变量中使用: 其中obj1 ={…methoda}

你可以使用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

关于这个问题的好文章:https://www.samanthaming.com/tidbits/70-3-ways-to-clone-objects/

var obj1 = {x: 5, y:5};
var obj2 = Object.assign({}, obj1 );
    
obj2  = {z: 10};
    
console.log(obj1);
console.log(obj2);

你也可以在NodeJS中使用SugarJS。

http://sugarjs.com/

它们有一个非常干净的克隆特性: http://sugarjs.com/api/Object/clone