Abb*_*iah 2 javascript arrays function ecmascript-6
我注意到调用 .map() 而不将其分配给变量会使其返回整个数组,而不仅仅是更改的属性:
const employees = [{
name: "John Doe",
age: 41,
occupation: "NYPD",
killCount: 32,
},
{
name: "Sarah Smith",
age: 26,
occupation: "LAPD",
killCount: 12,
},
{
name: "Robert Downey Jr.",
age: 48,
occupation: "Iron Man",
killCount: 653,
},
]
const workers = employees.concat();
workers.map(employee =>
employee.occupation == "Iron Man" ? employee.occupation = "Philantropist" : employee.occupation
);
console.log(employees);Run Code Online (Sandbox Code Playgroud)
但考虑到 .concat() 创建了原始数组的副本并将其分配给工人,为什么雇员也会发生变异?
发生这种情况是因为数组中的对象仍然由相同的指针引用。(您的数组仍然引用内存中的相同对象)。此外,Array.prototype.map()始终返回一个数组,并且它的结果应该分配给一个变量,因为它不进行就地映射。当您在方法中更改对象的属性时map,您应该考虑使用.forEach()来修改复制的员工数组中的对象的属性。要制作员工数组的副本,您可以使用以下命令:
const workers = JSON.parse(JSON.stringify(employees));
Run Code Online (Sandbox Code Playgroud)
请参阅下面的示例:
const workers = JSON.parse(JSON.stringify(employees));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11601 次 |
| 最近记录: |