You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 03:35:24