Map方法改变旧数组

时间:2016-07-25 13:59:34

标签: javascript

为什么地图会变成旧数组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)

2 个答案:

答案 0 :(得分:2)

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

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}));

答案 1 :(得分:1)

似乎没有直接的方法来复制没有引用的数组。 但这适用于:

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)