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

JavaScript嵌套数组按规则分块 首块自定义长度其余保留原长度

实现方案

你可以先把所有元素按原始顺序拍平,再结合原始子数组的长度作为默认规则分配元素,仅需传入需要调整的位置的自定义规则即可,不需要提前配置所有子数组的长度。

代码实现

function adjustSubarrays(originalArray, customRules = {}) {
  // 按原有顺序展开所有元素,保证原始值完整保留
  const allElements = originalArray.flat();
  // 直接提取原数组各子数组的长度作为默认长度,无需手动配置
  const defaultLengths = originalArray.map(subArr => subArr.length);
  const result = [];
  let currentPos = 0;

  // 除最后一个子数组外,其余按规则取对应长度的元素
  for (let i = 0; i < defaultLengths.length - 1; i++) {
    const takeLength = customRules[i] ?? defaultLengths[i];
    result.push(allElements.slice(currentPos, currentPos + takeLength));
    currentPos += takeLength;
  }

  // 最后一个子数组收纳所有剩余元素
  if (currentPos < allElements.length) {
    result.push(allElements.slice(currentPos));
  }

  return result;
}

调用示例

const myArray = [[1, 2, 3, 4], [5, 6], [7, 8, 9], [10]];
// 仅需传入要调整的第一个子数组的长度规则即可
const adjusted = adjustSubarrays(myArray, {0: 2});
console.log(adjusted); // 输出:[[1,2], [3,4], [5,6,7], [8,9,10]]

方案说明

  • 自动提取原数组的子数组长度作为默认规则,无需提前知晓所有子数组的元素数量,仅需传入需要修改的位置的长度规则
  • 先拍平再分配的逻辑避免了跨子数组移动元素的复杂处理,保证所有原始值完整保留
  • 自动将剩余元素全部归入最后一个子数组,符合需求中“除最后一个子数组外其余保持长度”的要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:39:04