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]我犯了什么错?有人能告诉我这里的逻辑错误吗?
eiee3dmh1#
第一次循环时,你读取第一个元素并得到1,然后你找到第一个值为1的索引,并将其更改为2,这使得你的数组看起来像这样:[2,2,3,4,5,6]第二次循环时,你读取第二个元素并得到2,然后你找到first索引,它的值是2,你把它改为4,这让你的数组看起来像这样:[4,2,3,4,5,6]等等使用经典的for循环并基于索引工作。
1
2
[2,2,3,4,5,6]
4
[4,2,3,4,5,6]
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并使用具有双倍值的 new 数组覆盖array。
map
array
let array = [1,2,3,4,5,6] array = array.map(value => value * 2); console.log(array);
q3qa4bjr2#
如果你真的想使用你的语法,你可以克隆数组来修复。然而,这个答案只是为了示例。最好使用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)
zxlwwiss3#
只是为了增加可能的替代方案的集合:如果你真的想改变原始数组的值,那么下面的方法也可以工作:
let array = [1,2,3,4,5,6] array.forEach((_,i,a)=>a[i]*=2) console.log(array)
hs1ihplo4#
得到意外输出的原因是在迭代原始数组时修改了原始数组。当你修改数组时,你会改变元素的顺序和索引,这可能会导致意外的行为。在你的例子中,你会多次加倍一些元素,而其他元素则被跳过。实现所需输出的更好方法是使用map方法,该方法将创建一个新数组,其中包含对原始数组中的每个元素调用提供的函数的结果。下面是一个使用map将数组中的每个元素加倍的例子:
let array = [1, 2, 3, 4, 5, 6]; let doubledArray = array.map(element => element * 2); console.log(doubledArray);
这应该会给予你输出:
[2, 4, 6, 8, 10, 12]
修改数组中每个元素的一种更安全、更有效的方法是使用forEach方法,该方法提供数组中每个元素的元素和索引,如下所示:
let array = [1, 2, 3, 4, 5, 6]; array.forEach((element, index) => { array[index] = element * 2; }); console.log(array);
4条答案
按热度按时间eiee3dmh1#
第一次循环时,你读取第一个元素并得到
1
,然后你找到第一个值为1
的索引,并将其更改为2
,这使得你的数组看起来像这样:[2,2,3,4,5,6]
第二次循环时,你读取第二个元素并得到
2
,然后你找到first索引,它的值是2
,你把它改为4
,这让你的数组看起来像这样:[4,2,3,4,5,6]
等等
使用经典的for循环并基于索引工作。
还可以考虑使用
map
并使用具有双倍值的 new 数组覆盖array
。q3qa4bjr2#
如果你真的想使用你的语法,你可以克隆数组来修复。然而,这个答案只是为了示例。最好使用Quentin发布的解决方案。
zxlwwiss3#
只是为了增加可能的替代方案的集合:如果你真的想改变原始数组的值,那么下面的方法也可以工作:
hs1ihplo4#
得到意外输出的原因是在迭代原始数组时修改了原始数组。
当你修改数组时,你会改变元素的顺序和索引,这可能会导致意外的行为。在你的例子中,你会多次加倍一些元素,而其他元素则被跳过。
实现所需输出的更好方法是使用map方法,该方法将创建一个新数组,其中包含对原始数组中的每个元素调用提供的函数的结果。
下面是一个使用map将数组中的每个元素加倍的例子:
这应该会给予你输出:
修改数组中每个元素的一种更安全、更有效的方法是使用forEach方法,该方法提供数组中每个元素的元素和索引,如下所示: