我正在尝试复制一个数组及其所有元素,但是我没有得到它。
我有一个带有名称和选项的模型,都包含字符串
这就是我所拥有的:
const myArrayToCopy = [myModel, myModel, myModel]
我要复制的是:
const copy = Object.assign([],myArrayToCopy);
console.log(copy === myArrayToCopy) //false
console.log(copy[0] === myArrayToCopy[0]) //true -> bad
然后我尝试了
copy[0] = Object.assign(myArrayToCopy[0])
//still true
我该怎么办?
答案 0 :(得分:4)
我建议使用深层副本,例如lodash
提供的内容:
import * as _ from "lodash";
let copy_array = _.cloneDeep( myArrayToCopy);
方便之处在于它可以推广到任何深度。
答案 1 :(得分:0)
可能的解决方案是
const copy = myArrayToCopy.map(o => ({...o}))
copy === myArrayToCopy // false
copy[0] === myArrayToCopy[0] // false
答案 2 :(得分:0)
let myCopy = myArrayToCopy.map((elem) => Object.assign({}, elem));
根据documentation,Object.assign将所有属性从第二个参数复制到第一个参数。
正如学习混乱所指出的那样,该解决方案不适用于复杂的对象(即嵌套对象)。
答案 3 :(得分:0)
这是所有可能性
const myArrayToCopy = [myModel, myModel, myModel];
const sameMemReference = myArrayToCopy; // Same memory reference
const newMemReference = [...myArrayToCopy]; // Different memory reference, but same for the objects
const totalMemDifference = [...myArrayToCopy.map(obj => ({...obj}))]; // total memory difference
总结:
sameMemReference
,第一个数组更改。newMemReference
,您的数组不变
totalMemDifference
中更改所需内容,这不会影响您的第一个数组。答案 4 :(得分:0)
您可以将JSON.parse和JSON.stringify用于对象的深层复制。
RecyclerView
答案 5 :(得分:0)
对于深层复制,您可以执行以下操作:
copy = JSON.parse(JSON.stringify(myArrayToCopy))