如何同时解构和复制阵列?

时间:2018-08-25 23:37:00

标签: javascript ecmascript-6 spread-syntax

我知道您可以使用传播运算符复制数组:

const itemsArr = [...this.state.itemsArr];

您可以解构作为对象键值的数组:

const { itemsArr } = this.state

有没有办法将它们组合为一个步骤?伪代码:

const { itemsArr } = [...this.state]

const { [...itemsArr] } = this.state

编辑:是否有一种方法可以将它们组合为一个步骤, 以避免两次输入“ itemsArr”?

1 个答案:

答案 0 :(得分:1)

这可以通过从itemsArr的副本中解散state来完成:

const { itemsArr } = JSON.parse(JSON.stringify(this.state))

这样做的优点是您的嵌套对象被克隆,因此您的state.itemsArr也被复制了,修改itemsArr不会更改state中的数组。 缺点是,如果您的state对象包含函数,则使用此方法将无法访问它们,而且您可以质疑性能。

复制state的另一种方法是使用Object.assign

const { itemsArr } = Object.assign({}, this.state)

使用此方法,您可以在state内访问函数,但会进行浅表复制,因此不会克隆state.itemsArr

ECMAScript2018实际上具有一个可与JSON对象一起使用的散布运算符:

const { itemsArr } = { ...this.state }

https://codesandbox.io/s/32qvzjy2op(请查看浏览器的控制台,该工具中的控制台是错误的)。

但是再说一次,它只会复制一个浅表。

最好的方法是编写/导入一个deepCopy函数,该函数将使用其嵌套的属性和函数克隆该对象。

https://lodash.com/docs#cloneDeep