[英]Clone part of javascript object
我有一个带有许多嵌套对象的大型JS对象。 例如:
var A = {
'b': {
c: [1],
d: {
e: {
f: 'g'
}
}
}
};
我需要创建一个看起来像对象“ A”的对象“ B”,但是数组“ bc”应该包含另一个项:
var B = {
'b': {
c: [1, 2],
d: {
e: {
f: 'g'
}
}
}
};
对象“ A”不应更改。
我知道两种方法:
1个深度克隆JS对象:
var B = JSON.parse(JSON.stringify(A)); // or with lodash: _.cloneDeep(A)
B.b.c.push(2);
2仅克隆那些我需要克隆的对象和数组:
var B = Object.assign({}, A);
B.b = Object.assign({}, B.b);
B.b.c = B.b.c.slice(0);
B.b.c.push(2);
恐怕第一种方法会占用大量资源。 我不需要克隆所有对象。 第二种方式有太多的代码。 在我的示例中有一个小对象,但是在我的应用程序中它可能是很大的对象。
如何创建最佳方式的对象“ B”?
JSON.stringify
/ .parse
当然是深度克隆(简单)对象的最简单方法,但是,正如您所说的,它涉及序列化和解析对象,这绝对不是最有效的方法。
幸运的是,ES6使事情变得更好了。 借助ESNext,您也可以传播对象:
var B = { ...A };
当然, bc
仍然存在您的问题,但是必须手动调整:
var B = { ...A, b: { ...A.b, c: [1, 2] }};
这是对象传播运算符的Babel插件: https : //babeljs.io/docs/plugins/transform-object-rest-spread/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.