这是正确的方式,在JavaScript数组的每个元素加倍?


let array = [1,2,3,4,5,6]
for (element of array){
array[array.indexOf(element)]= element*2
}
console.log(array)

这是我为数组的每个元素翻倍而写的代码,但我得到的输出是(6) [8,2,12,4,10,6]

我犯了什么错误?

谁能告诉我这里的逻辑错误。

第一次循环读取第一项并获得1,然后找到第一个索引值为1并将其更改为2,使数组看起来像:[2,2,3,4,5,6]

第二次循环时,读取第二项并得到2,然后首先找到索引,它的值是2然后你把它改成4这样你的数组看起来就像:[4,2,3,4,5,6]

…等等。


使用经典的for循环并基于索引工作。

let array = [1,2,3,4,5,6]
for (let i = 0; i < array.length; i++){
array[i]= array[i]*2
}
console.log(array)

还可以考虑使用map,并用一个具有双值的数组覆盖array

let array = [1,2,3,4,5,6]
array = array.map(value => value * 2);
console.log(array);

如果您真的想使用您的语法,您可以克隆数组来修复。然而,这个答案只是为了举例。最好使用Quentin发布的解决方案。

let array = [1,2,3,4,5,6]
let clonedArr = [...array];
for (element of clonedArr){
array[clonedArr.indexOf(element)]= element*2
}
console.log(array)

只是添加到可能的替代集合中:如果您真的想更改原始数组值,那么以下操作也可以工作:

let array = [1,2,3,4,5,6]
array.forEach((_,i,a)=>a[i]*=2)
console.log(array)

最新更新