如何同时解构和复制数组?
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
函数,该函数使用嵌套的属性和函数克隆对象。
我知道你可以用扩展运算符复制一个数组:
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
函数,该函数使用嵌套的属性和函数克隆对象。