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

如何用循环获取数组后半部分?代码报错排查求助

用循环实现返回数组后半部分(奇数长度排除中间元素)

需求

返回包含数组后半部分的新数组,奇数长度数组需排除中间索引元素。

错误代码

function secondHalf(arr) {
    
    let newArr = [];

    for (let i = Math.floor(arr.length / 2); i >= 0; i--) {
        newArr.push(arr[i]);
    }   return newArr;
}

secondHalf([1, 2]);
secondHalf([1]);

测试报错信息

1) Problems
       secondHalf
         should return only the second half the array:

      AssertionError: expected [ 2, 1 ] to deeply equal [ 2 ]
      + expected - actual

       [
         2
      -  1
       ]
      
      at Context.<anonymous> (test/problems-specs.js:72:48)
      at processImmediate (node:internal/timers:466:21)

  2) Problems
       secondHalf
         should be the exclusive first half:

      AssertionError: expected [ 1 ] to deeply equal []
      + expected - actual

      -[
      -  1
      -]
      +[]
      
      at Context.<anonymous> (test/problems-specs.js:75:45)
      at processImmediate (node:internal/timers:466:21)

错误分析

你的代码有两个核心问题:

  • 循环方向错误:从Math.floor(arr.length / 2)开始往数组头部(i递减到0)遍历,导致把前半部分(甚至中间元素)倒序塞进新数组,完全不符合“取后半部分”的要求。
  • 起始索引错误:对于奇数长度的数组(比如长度1),Math.floor(arr.length / 2)得到0,会把中间元素(也是唯一元素)加入数组,但需求要求排除中间元素,此时应该返回空数组。

修正后的循环实现

function secondHalf(arr) {
    let newArr = [];
    // 计算起始索引:偶数长度取n/2,奇数长度取(n+1)/2(跳过中间元素)
    const startIndex = Math.ceil(arr.length / 2);
    // 从起始索引遍历到数组末尾,依次加入新数组
    for (let i = startIndex; i < arr.length; i++) {
        newArr.push(arr[i]);
    }
    return newArr;
}

// 测试验证
console.log(secondHalf([1, 2])); // 输出 [2]
console.log(secondHalf([1])); // 输出 []
console.log(secondHalf([1,2,3])); // 输出 [3]
console.log(secondHalf([1,2,3,4,5])); // 输出 [4,5]

逻辑说明

  • Math.ceil(arr.length / 2)可以统一处理奇偶长度:
    • 偶数长度(比如2):ceil(2/2)=1,从索引1开始遍历,取到后半部分元素;
    • 奇数长度(比如1):ceil(1/2)=1,此时1 >= arr.length(1),循环不执行,返回空数组;
    • 奇数长度(比如3):ceil(3/2)=2,从索引2开始遍历,跳过中间的索引1元素。
  • 循环从起始索引往数组末尾遍历,保证元素顺序和原数组后半部分一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:41:08