如何仅用for循环原地反转数组?请指出我的代码错误
问题分析与修正
你的代码存在两个核心错误:
1. 循环范围错误
你让i遍历整个数组的长度,这会导致前半部分交换完成后,后半部分又把元素交换回原位置。比如数组长度为7,当i走到4时,其实是在交换已经被处理过的位置(4和2),等于把之前的交换操作抵消了,最终数组回到初始状态。正确的做法是只遍历数组的前半部分,循环条件改成i < array.length / 2即可。
2. 元素交换逻辑错误
你当前的交换步骤:
let temp = array[i]; array[(array.length-1)-i] = array[i]; array[i] = temp;
这等于把array[(array.length-1)-i]和array[i]都设成了原来的array[i],完全没实现交换。正确的交换逻辑应该是互换两个位置的元素,不管用临时变量还是解构赋值,都要保证两个位置的值互相替换。
修正后的代码
普通交换版本
let array = [1,2,3,4,5,6,7]; function reverseArray(array){ for(let i=0; i < array.length / 2; i++){ const endIndex = array.length - 1 - i; const temp = array[i]; array[i] = array[endIndex]; array[endIndex] = temp; } console.log(array); // 输出 [7,6,5,4,3,2,1] } reverseArray(array);
解构赋值版本
let array = [1,2,3,4,5,6,7]; function reverseArray(array){ for(let i=0; i < array.length / 2; i++){ const endIndex = array.length - 1 - i; [array[i], array[endIndex]] = [array[endIndex], array[i]]; } console.log(array); // 输出 [7,6,5,4,3,2,1] } reverseArray(array);
这两个版本都是在原数组上直接修改,没有创建新数组,能正确实现反转效果。
内容的提问来源于stack exchange,提问作者Mohit M
相关产品推荐
相关产品推荐

