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

JavaScript数组后半部分反转代码异常,请求排查修正

问题分析与修复

你的代码核心问题是错误地将后半部分元素与前半部分元素交换,而非反转后半部分本身。我们需要调整循环的索引逻辑,只针对数组的后半段进行首尾对应位置的交换。

原代码问题点

  1. 循环中j的初始值设为(n/2)-1,指向的是前半部分的最后一个元素,导致后半部分元素和前半部分元素交换,偏离了反转后半部分的目标。
  2. 循环条件i < n/4逻辑错误,应该基于后半部分的长度来确定交换次数,而非数组总长度的1/4。

修复后的代码

方案一:while循环实现(更直观)

let a = [5, 17, 11, 10, 12, 6];
let n = a.length;
const halfStart = Math.floor(n / 2); // 后半部分起始索引
let left = halfStart;
let right = n - 1;

// 反转后半部分:交换后半部分首尾对应元素
while (left < right) {
  const temp = a[left];
  a[left] = a[right];
  a[right] = temp;
  left++;
  right--;
}

// 输出结果
for (let i = 0; i < n; i++) {
  console.log(a[i]);
}

方案二:for循环实现(更紧凑)

let a = [5, 17, 11, 10, 12, 6];
let n = a.length;
const halfStart = n / 2; // 示例数组长度为偶数,直接取n/2即可
const halfLength = n - halfStart;

for (let i = 0; i < Math.floor(halfLength / 2); i++) {
  const leftIdx = halfStart + i;
  const rightIdx = n - 1 - i;
  const temp = a[leftIdx];
  a[leftIdx] = a[rightIdx];
  a[rightIdx] = temp;
}

// 输出结果
for (let i = 0; i < n; i++) {
  console.log(a[i]);
}

运行结果

执行修复后的代码,输出为:

5
17
11
6
12
10

完全符合预期结果。

通用说明

如果数组长度为奇数(比如[1,2,3,4,5]),上述代码依然可以正确反转后半部分(后半部分为[3,4,5],反转后变成[5,4,3],最终数组为[1,2,5,4,3]),具备更好的通用性。

内容的提问来源于stack exchange,提问作者Sougata Mukherjee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 18:32:47