我有两个数组,并且包含类似的数据
let arr1 = ['IND','JPN','USA']
let arr2 = [...arr1]
console.log(arr2)
我想将数据从arr1复制到arr2,因为我已经使用... 但是这里arr1发生了变化,而arr2也发生了变化,如何避免arr1中的任何变化都不会改变arr2中的项。
arr1数据来自渲染,并使用props传递到另一个组件。
答案 0 :(得分:3)
[... arr1]正在执行浅表复制,只要您要克隆的值仅深一层,那么使用[... arr1]就可以了。 在您的示例中,更新arr1不会更改arr2
let arr1 = [1,2,3,4];
let arr2 = [...arr1];
// ex.
// arr1[0] = 'A';
// arr2 will still be [1,2,3,4]
但是用于深度克隆。万一数组中的项目有对象。
您将需要使用其他解决方案。 Lodash为此提供了一种方法:
let arr2 = _.cloneDeep(arr1);
还有一种使用JSON.stringify进行深度克隆的方法,但是如果您在一个对象中分配了函数,则不会被克隆
JSON.parse(JSON.stringify(arrayOfObjects))
答案 1 :(得分:0)