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)