在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)解决不了问题。我需要自己写一个递归克隆吗?还是有一些我没有看到的内置的东西?
当前回答
在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);
其他回答
另一个解决方案是直接封装在新变量中使用: 其中obj1 ={…methoda}
查看underscore.js。它具有克隆和扩展以及许多其他非常有用的功能。
这可能很有用:在Node.js中使用下划线模块
在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);
关于这个问题的好文章: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);
没有一个答案让我满意,一些不工作或只是肤浅的克隆,答案来自@clint-harris和使用JSON。Parse /stringify很好,但是很慢。我找到了一个可以快速进行深度克隆的模块:https://github.com/AlexeyKupershtokh/node-v8-clone