Map方法更改旧数组

Map method change old array

本文关键字:数组 方法 Map      更新时间:2023-09-26

为什么映射要更改旧数组numbers?我不想更改旧数组,我想编辑它(key * 2)并将其放入新数组roots中。有人能解释一下问题出在哪里吗?

var numbers = [{key:1,prop:"ok"}, {key:2,prop:"ok"}, {key:3,prop:"ok"}];
var roots = numbers.map(index => {
  index.key = index.key * 2
  return index
})
console.log('numbers', numbers)
console.log('roots', roots)

在您的情况下,最简单的方法是

var numbers = [{key:1,prop:"ok"}, {key:2,prop:"ok"}, {key:3,prop:"ok"}];
var roots = numbers.map(elt => ({
  key: elt.key * 2,
  prop: elt.prop
}));

换句话说,从map返回新对象

或者,如果你愿意,你可以破坏参数:

var roots = numbers.map(({key, prop}) => ({key: key * 2, prop}));

似乎没有直接的方法可以在没有引用的情况下复制数组。但这是可行的:

var numbers = [{key:1,prop:"ok"}, {key:2,prop:"ok"}, {key:3,prop:"ok"}];
var roots = JSON.parse(JSON.stringify(numbers)); 
roots.map(index => {
  index.key = index.key * 2
  return index
})
console.log('numbers', numbers)
console.log('roots', roots)