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

JavaScript编写数组反转函数输出全为1的问题求助

JavaScript数组反转函数逻辑错误排查

你的代码运行后输出全为1的数组,没有实现反转效果,核心是嵌套循环的逻辑存在错误。

原实现代码

const arr = [1, 2, 3, 4, 5, 6, 7];

function rev(arr) {
  var value;
  var nArr = [];
  for (let i = arr.length - 1; i >= 0; i--) {
    value = arr[i];
    for (let j = 0; j < arr.length; j++) {
      nArr[j] = value;
    }
  }
  console.log(nArr);
}

rev(arr);

错误原因

  • 你额外加了一层完全不需要的内层循环:每次外层循环倒序拿到一个元素value后,内层循环会遍历新数组的所有索引位置,把每个位置的值都覆盖为当前的value。
  • 实际执行流程:
    1. 外层第一次循环取到最后一个元素7,内层循环把新数组所有位置都设为7,新数组为[7,7,7,7,7,7,7]
    2. 外层第二次循环取到倒数第二个元素6,内层循环再次把新数组所有位置覆盖为6,新数组为[6,6,6,6,6,6,6]
    3. 循环依次执行,最后一次外层循环取到原数组第一个元素1,内层循环把所有位置覆盖为1,最终就得到了你看到的[1,1,1,1,1,1,1]

修正代码

删除多余的内层循环,每次倒序拿到元素后直接追加到新数组即可:

const arr = [1, 2, 3, 4, 5, 6, 7];

function rev(arr) {
  const nArr = [];
  for (let i = arr.length - 1; i >= 0; i--) {
    nArr.push(arr[i]);
  }
  console.log(nArr);
  return nArr;
}

rev(arr); // 输出 [7,6,5,4,3,2,1]

拓展参考实现

  • 原生API方法:直接调用数组内置的reverse()方法即可反转数组,注意该方法会直接修改原数组
  • 双指针原地反转:不需要额外创建新数组,空间复杂度为O(1)
function revInPlace(arr) {
  let left = 0;
  let right = arr.length - 1;
  while (left < right) {
    // 交换首尾指针对应的元素
    [arr[left], arr[right]] = [arr[right], arr[left]];
    left++;
    right--;
  }
  return arr;
}

内容的提问来源于stack exchange,提问作者Andre H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:36:43