如何在Javascript .map()函数中改变原始数组?

Max*_*rid 2 javascript

例如:

var persons = [{ "name":"A", "salary":1200 }, { "name":"B", "salary":"1500" }];
Run Code Online (Sandbox Code Playgroud)

并且您想要更改原始数组中每个人的"薪水"值.

Sur*_*yan 13

如果要改变原始数组,可以使用Array#forEach函数.

const persons = [{ "name":"A", "salary":1200 }, { "name":"B", "salary": 1500 }];

persons.forEach(item => item.salary += 1000);

console.log(persons)
Run Code Online (Sandbox Code Playgroud)

Array #map创建一个新创建的项目数组并返回该数组.在您需要分配返回的结果之后.

let persons = [{ "name":"A", "salary":1200 }, { "name":"B", "salary": 1500 }];

persons = persons.map(item => {
  item.salary += 1000;
  return item;
});

console.log(persons);
Run Code Online (Sandbox Code Playgroud)

  • 如果您有一个素数数组,并且想要在forEach中更改这些值,则将获得它们的副本,并且实际的数组项不会更改 (2认同)
  • 对于“map”,即使不重新分配给“persons”变量,并在控制台中打印,给出与“forEach”相同的结果,可能是因为对象是通过引用传递的? (2认同)

ter*_*reb 11

您可以直接使用地图迭代来改变对象。如果我理解正确的话。

persons.map(i => { i.salary = i.salary * 1.25; return i; });
console.log(persons);
// [{ "name":"A", "salary": 1875 }, { "name":"B", "salary": 2343.75 }]
Run Code Online (Sandbox Code Playgroud)

尽管它是反模式,但您应该避免在map().

  • @JohnPan,它被认为是使用映射函数的反模式,而不实际需要结果。 (4认同)
  • 这个答案完全正确,所以我投票了。为什么投反对票?避免突变是一种选择而不是规则。 (2认同)