Javascript 当我们需要深度克隆一个对象时,我们应该怎么做

Javascript 当我们需要深度克隆一个对象时,我们应该怎么做,javascript,json,functional-programming,ecmascript-6,redux,Javascript,Json,Functional Programming,Ecmascript 6,Redux,根据另一个问题的说法: spread运算符类似于Object.assign,不会深度克隆对象 对象JSON工作的原因是您创建了一个 但是,新对象将通过严格的相等性检查 您的所有组件都将进行不必要的更新,因为不会有任何内容通过 现在是严格的平等检查 assign({},…prevState,…newState)将创建一个新的 顶级对象,但它不会为任何对象创建新对象 嵌套在prevState或newState中。然而,你必须小心 更新嵌套对象以避免不必要的重新渲染。这可以 对于嵌套较深的对象和数组,

根据另一个问题的说法:

spread运算符类似于Object.assign,不会深度克隆对象 对象JSON工作的原因是您创建了一个 但是,新对象将通过严格的相等性检查 您的所有组件都将进行不必要的更新,因为不会有任何内容通过 现在是严格的平等检查

assign({},…prevState,…newState)将创建一个新的 顶级对象,但它不会为任何对象创建新对象 嵌套在prevState或newState中。然而,你必须小心 更新嵌套对象以避免不必要的重新渲染。这可以 对于嵌套较深的对象和数组,这很棘手

我的问题是。。。。当我们需要返回具有包含数组的属性的对象的新版本时,我们必须做什么?例如:

const foo = {
  myArray: [1, 2, 3],
  name: 'Hello world'
};

const clonedObj = { ...foo }
这将创建一个新对象,其中包含名称及其内容的副本、myArray key的副本,但不包含[1,2,3]的副本

JSON.parse+JSON.stringify可以做到这一点,但看起来不是一种干净的方式

我还有什么选择

多谢各位

const clonedObj = Object.assign({}, foo);

在回答问题之前,考虑仔细阅读问题。它不仅非常清楚地讨论了“深度”拷贝的需要,还特别指出了
Object.assign
不适用于深度拷贝(它不适用)。希望这有帮助。