复制数组上的 Javascript .map()

2024-03-07

我注意到调用 .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);

但考虑到 .concat() 创建了原始数组的副本并将其分配给工人,为什么雇员也会发生变异?


发生这种情况是因为数组中的对象仍然由相同的指针引用。 (您的数组仍然引用内存中的相同对象)。还,Array.prototype.map()总是返回一个数组,它的结果应该分配给一个变量,因为它不这样做in-place映射。当您更改对象的属性时map方法,你应该考虑使用.forEach()相反,修改复制的员工数组中对象的属性。要制作员工数组的副本,您可以使用以下命令:

const workers = JSON.parse(JSON.stringify(employees));

请参阅下面的示例:

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 = JSON.parse(JSON.stringify(employees));
workers.forEach(emp => {
  if(emp.occupation == "Iron Man") emp.occupation = "Philantropist";
});

console.log("--Employees--")
console.log(employees);
console.log("\n--Workers--");
console.log(workers);
  • 注意:如果您的数据中有任何方法,您需要使用另一种方法来深复制
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

复制数组上的 Javascript .map() 的相关文章

随机推荐