JS如何深度复制两个对象



我有一个obj1:

const obj1 = { val: {v: 0}}

我正试图通过以下操作深度复制它:

const obj2 = {...obj1}

然而{v: 0}仍然没有被复制,我将如何做到这一点>

我想这是最简单的方法,但有点笨拙

const obj2 = JSON.parse(JSON.stringify(obj1))

否则,您需要编写一个递归克隆函数或使用一些库——只需沿着这些行搜索cloneDeep、copyDeep或smth即可。

您可以为此使用lodash-es包。它提供了函数cloneDeep(),该函数将递归地克隆值。

这是包裹:https://www.npmjs.com/package/lodash-es

以下是文档:https://lodash.com/docs/4.17.15#cloneDeep

import { cloneDeep as _cloneDeep } from 'lodash-es';
const obj2  = _cloneDeep(obj1);

您正在按照应该的方式(使用排列运算符(进行操作。排列运算符会很好地复制所有内容。

const obj1 = { val: {v: 0} };
const obj2 = { ...obj1 };
console.log(obj2);

const obj1 = {
test: 1,
test2: {
t: 1,
f: () => console.log('hello')
}
};
const obj2 = { ...obj1 };
console.log( obj2 );
console.log( obj2.test2.f() );

如果您(在任何时候(对对象执行JSON.stringify,您将丢失任何无法转换为json方案的方法/函数或其他东西,因此最好避免这样做。对象销毁是您想要的。

我没有足够的代表来标记,但这是许多问题的清晰重复

即使在谷歌上搜索标题对你来说也会更容易

无论如何,我使用了一个名为rfdc的模块来实现这一点,而lodash有一个函数来实现否则,您可以使用递归函数在src对象中循环,该函数将字段添加到dest对象中

最新更新