在JavaScript中,数组的直接赋值通常指的是将一个数组变量赋值给另一个变量,或者将一个数组作为参数传递给函数。这里有一些基础概念和相关细节:
JSON.parse(JSON.stringify(array))
,或者使用库函数如Lodash的_.cloneDeep
。问题:修改一个数组变量会影响另一个变量。
原因:因为两个变量引用的是同一个数组对象。
解决方法:
slice()
方法:let newArray = oldArray.slice();
let newArray = [...oldArray];
Array.from()
方法:let newArray = Array.from(oldArray);
JSON.parse(JSON.stringify(oldArray));
或者Lodash的_.cloneDeep(oldArray);
// 直接赋值
let arr1 = [1, 2, 3];
let arr2 = arr1;
arr2[0] = 99;
console.log(arr1); // 输出: [99, 2, 3]
// 使用slice()方法避免影响原数组
let arr3 = [1, 2, 3];
let arr4 = arr3.slice();
arr4[0] = 99;
console.log(arr3); // 输出: [1, 2, 3]
// 使用扩展运算符避免影响原数组
let arr5 = [1, 2, 3];
let arr6 = [...arr5];
arr6[0] = 99;
console.log(arr5); // 输出: [1, 2, 3]
// 使用深拷贝避免影响原数组(对于嵌套数组)
let arr7 = [{ a: 1 }, { b: 2 }];
let arr8 = JSON.parse(JSON.stringify(arr7));
arr8[0].a = 99;
console.log(arr7); // 输出: [{ a: 1 }, { b: 2 }]
通过上述方法,可以根据不同的需求选择合适的数组复制方式,以避免不必要的副作用。