应用于数组副本的 map 方法如何更改原始客户端数组?
const clients = [
{ name: 'Alex',town: 'Sitka',debt: false },
{ name: 'Bob',town: 'Phoenix',debt: false },
{ name: 'Pol',town: 'LosAngeles',debt: true },
{ name: 'Roy',town: 'Buckeye',debt: false },
{ name: 'Brad',town: 'Dallas',debt: false },
{ name: 'Leny',town: 'Charlotte',debt: true },
{ name: 'Peny',town: 'Hibbing',debt: false },
]
const clientsCopy1 = clients.slice();// делаем копию массива clients;
const clientsCopy2 = [...clientsCopy1]; // делаем копию массива clientsCopy1
const clientsCopy3 = clientsCopy2.map(i => { // перебираем вторую копию методом map
i.name = i.name.toUpperCase()
return i;
})
console.log(clients); // исходный массив тоже изменился!
Использование других способов копирования дает тот-же результат.
Такое поведение только с методом map.
При модификации копий массивов другими способами, исходный массив остается
без изменений.
.slice 不复制数组中的对象。它复制数组的大小和对数组中对象的引用。
要制作完整副本,您需要将其转换为 JSON 并将其解析回来。这是最快的方法,但它不保存类信息(但您不需要在这里这样做)。