| 方法 | 是否生成新数组 | 是否改变原数组 | 适用场景 |
|---|---|---|---|
[...array] | ✅ | ❌ | 快速浅拷贝数组 |
array.map(item => item) | ✅ | ❌ | 可以顺便加工元素或浅拷贝 |
array.filter(item => true) | ✅ | ❌ | 用于筛选,偶尔用于拷贝,但不直观 |
array2 = array1 | ❌ | ✅ | 引用赋值,修改一个会影响另一个 |
1. 使用展开运算符(Spread Operator)
this.filteredTestTypeList=[...this.testTypeList];…this.testTypeList 会把数组里的每一项“展开”,然后放入一个新数组。
效果:创建了一个新的数组,浅拷贝每一项(数组里的对象还是引用)。
优点:语法简洁,常用。
2. 使用 map 拷贝
this.filteredTestTypeList=this.testTypeList.map(item=>item);map 会遍历数组,把每一项传给回调函数,然后返回一个新数组。
这里的写法 item => item 表示“原样返回每一项”。
效果:同样是创建一个新数组,浅拷贝每一项。
实际用途上,这里用 map 没有改变数据,只是生成了新数组,跟 […array] 差不多。
3. 使用 filter 拷贝
this.filteredTestTypeList=this.testTypeList.filter(item=>true);filter 会遍历数组,返回回调函数返回 true 的元素组成的新数组。
item => true 表示保留所有元素。
效果:也能生成一个新数组,但 filter 本质是“筛选”,不适合单纯拷贝数组,只是顺手也能做浅拷贝。