如何同时解构和复制数组?

How to destructure and copy an array simultaneously?

我知道你可以用扩展运算符复制一个数组:

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

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

const { itemsArr } = this.state

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

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

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

编辑: 有没有办法将它们合并为一个步骤,以避免输入两次 "itemsArr"?

可以通过从 state:

的副本解构 itemsArr 来完成
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(看你浏览器的console,工具里面那个不好)

但话又说回来,它只做了一个浅拷贝。

最好的方法是 write/import 一个 deepCopy 函数,该函数使用嵌套的属性和函数克隆对象。

https://lodash.com/docs#cloneDeep