es6 map 是深拷贝嘛
时间: 2025-02-01 14:37:48 AIGC 浏览: 33
ES6 `map()` 函数本身并不进行深拷贝。当你使用 `.map()` 对数组进行操作时,它创建了一个新数组,每个元素都是原始数组元素经过函数处理的结果。这只是一个浅拷贝,因为新数组的引用指向原始数组的一个元素副本。如果你在`map`回调中对元素进行了深度修改,这些改变会影响到新数组,但不会影响到原始数组。
示例:
```javascript
let originalData = [{ a: 1 }, { b: 2 }];
let copiedData = originalData.map(item => ({ ...item, c: 3 }));
copiedData[0].a = 4; // 修改新数组不影响原始数据
console.log(originalData); // [{ a: 1 }, { b: 2 }]
console.log(copiedData); // [{ a: 4, c: 3 }, { b: 2, c: 3 }]
```
如上所述,如果需要避免这种共享,应该在`map`内部实现深拷贝,如引用[4]所示:
```javascript
const deepCopyMap = (items) => {
return items.map(item => ({ ...item }));
};
let originalData = [{ a: 1 }, { b: 2 }];
let deepCopiedData = deepCopyMap(originalData);
deepCopiedData[0].a = 4; // 修改新数组不影响原始数据
console.log(originalData); // [{ a: 1 }, { b: 2 }]
console.log(deepCopiedData); // [{ a: 4 }, { b: 2 }]
```
这样,即使在新数组中做深度修改,原始数据也会保持不变。
阅读全文
相关推荐


















