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

数组交替元素交换实现:现有硬编码代码不合理,求正确方案

实现数组交替奇数索引元素的镜像交换

需求说明

需要将数组中奇数索引的元素与对应的镜像位置奇数索引元素交换,偶数索引元素保持不变。示例:

  • 原数组:[8,7,4,6,9,3,2,1]
  • 结果数组:[8,1,4,3,9,6,2,7]

原实现的问题

你提供的代码通过硬编码每个索引的返回值,完全不具备通用性——只要数组长度发生变化,代码就会失效,且维护成本极高,无法适配任意符合该规则的数组。

正确实现方式

方法一:原地交换(高效节省内存)

直接修改原数组,仅遍历前半部分的奇数索引完成交换:

let arr = [8, 7, 4, 6, 9, 3, 2, 1];
const len = arr.length;

// 遍历前半段的奇数索引,步长为2
for (let i = 1; i < len / 2; i += 2) {
    // 计算当前奇数索引对应的镜像位置
    const mirrorIndex = len - i;
    // 解构赋值快速交换元素
    [arr[i], arr[mirrorIndex]] = [arr[mirrorIndex], arr[i]];
}

console.log(arr); // 输出: [8, 1, 4, 3, 9, 6, 2, 7]

方法二:生成新数组(不修改原数组)

通过map遍历生成新数组,保留原数组不变:

const arr = [8, 7, 4, 6, 9, 3, 2, 1];
const len = arr.length;

const newArr = arr.map((val, index) => {
    // 偶数索引直接返回原元素
    if (index % 2 === 0) {
        return val;
    }
    // 奇数索引返回镜像位置的元素
    const mirrorIndex = len - index;
    return arr[mirrorIndex];
});

console.log(newArr); // 输出: [8, 1, 4, 3, 9, 6, 2, 7]

通用性说明

这两种方法都适配任意长度的数组:

  • 若数组长度为偶数:所有奇数索引都能找到对应的镜像奇数索引完成交换
  • 若数组长度为奇数:中间位置的奇数索引(如长度为9时的索引4)镜像位置为自身,交换后元素不变,符合规则

内容的提问来源于stack exchange,提问作者Prasanna Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 22:18:09