Javascript 映射方法更改旧数组

Javascript 映射方法更改旧数组,javascript,Javascript,为什么地图会改变旧的数组数字?我不想更改旧数组,我想编辑它(key*2)并将其放入新数组根中。有人能解释一下问题是什么吗 var numbers=[{key:1,prop:ok},{key:2,prop:ok},{key:3,prop:ok}]; 变量根=数字。映射(索引=>{ index.key=index.key*2 回报指数 }) console.log('number',number) log('roots',roots)似乎没有直接的方法来复制没有引用的数组。 但这在以下方面起作用:

为什么地图会改变旧的数组
数字
?我不想更改旧数组,我想编辑它(
key*2
)并将其放入新数组
根中。有人能解释一下问题是什么吗

var numbers=[{key:1,prop:ok},{key:2,prop:ok},{key:3,prop:ok}];
变量根=数字。映射(索引=>{
index.key=index.key*2
回报指数
})
console.log('number',number)

log('roots',roots)
似乎没有直接的方法来复制没有引用的数组。 但这在以下方面起作用:
var numbers=[{key:1,prop:ok},{key:2,prop:ok},{key:3,prop:ok}];
var root=JSON.parse(JSON.stringify(numbers));
root.map(索引=>{
index.key=index.key*2
回报指数
})
console.log('number',number)

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

仅适用于您:您的“数组”是一个json对象,而不是一个好的普通数组。:-)你使用了哪种Javascript框架?@reporter我想你是倒着写的。没有json,好的,thx,有什么办法吗?@记者伙计,你是认真的吗?这是一个普通的JAVASCRIPT
map
不会保护您不修改引用类型。只有基本类型。它可以工作是的,可以解释为什么,我不明白为什么我需要解析它,因为
数字
指向同一个对象。如果你不打算捕获
映射
的结果,你最好使用
forEach
,这样你就不会创建第三个,未使用的数组。@4castle好吧,我首先使用的是forEach,但我想玩一下map,顺便说一句,我喜欢你的评论top@4castle为什么要从问题中删除json标记?Murat K.使用了
JSON.parse(JSON.stringify(numbers))
。我还将
index
重命名为
object