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

Google Apps Script按属性和拆分数组:代码修正请求

问题分析与代码修正

你的代码存在几个关键问题导致结果不全:

  • 函数内部硬编码了arr和sumMax,直接覆盖传入参数,既让函数失去通用性,也固定了后续处理的数组范围。
  • 使用arr.unshift修改原数组,同时循环的n取的是初始数组长度,导致被放回数组的后续元素无法被遍历到。
  • 循环结束后没有把最后剩余的temp_subArr加入结果数组。

以下是修正后的代码:

function splitArrByDuration(arr, sumMax) {
  const splittedArr = [];
  let tempSubArr = [];
  let currentSum = 0;

  for (const item of arr) {
    const itemValue = item[1];
    // 检查加入当前元素后是否超过sumMax
    if (currentSum + itemValue > sumMax) {
      // 先把当前临时数组存入结果
      splittedArr.push(tempSubArr);
      // 重置临时数组和当前总和,存入当前元素
      tempSubArr = [item];
      currentSum = itemValue;
    } else {
      // 可以加入,直接添加并更新总和
      tempSubArr.push(item);
      currentSum += itemValue;
    }
  }

  // 循环结束后,把最后剩余的非空临时数组加入结果
  if (tempSubArr.length > 0) {
    splittedArr.push(tempSubArr);
  }

  Logger.log(splittedArr);
  return splittedArr;
}

// 调用示例
splitArrByDuration([["a", 2], ["b", 1], ["c", 2], ["d", 1]], 3);

修正逻辑说明:

  • 用currentSum实时记录临时数组的总和,避免每次调用sumAtIndex遍历计算,提升效率。
  • 遍历原数组时不修改原数组,通过判断总和来决定是否拆分临时数组。
  • 循环结束后处理最后一组未存入的元素,确保所有元素都被正确分组。

调用修正后的函数,输出会是预期的[[["a", 2], ["b", 1]], [["c", 2], ["d", 1]]]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:40:21