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

如何在JavaScript中按总元素量拆分多数组对象至指定大小

JavaScript 对象按元素总数拆分函数实现

给定一个包含数组属性的 JavaScript 对象,需将其拆分为对象数组,每个对象的所有属性数组的元素总数不能超过指定的 size 值。

示例输入

const obj = {
  r: [1,2,3,4,5,6,7],
  p: [8,9,10,11,12,13,14],
  e: [15,16,17,18,19,20,21,22,23,24]
}

示例输出(当 size=10 时)

const res = [
 {
   r: [1,2,3,4,5,6,7],
   p:[8,9,10],
 },
 {
   p:[11,12,13,14],
   e:[15,16,17,18,19,20]
 },
 {
   e: [21,22,23,24]
 }
]

实现函数

const splitArray = (obj, size) => {
  // 把每个属性转换成带剩余数组的对象,方便追踪未处理元素
  const sources = Object.entries(obj).map(([key, arr]) => ({
    key,
    remaining: [...arr],
    total: arr.length
  }));

  const result = [];

  // 只要还有未处理的元素就继续拆分
  while (sources.some(item => item.remaining.length > 0)) {
    const currentChunk = {};
    let currentElementCount = 0;

    // 遍历所有还有剩余元素的属性,往当前块里加元素
    for (const source of sources) {
      if (source.remaining.length === 0) continue;

      // 计算当前块还能容纳多少元素
      const availableSlots = size - currentElementCount;
      if (availableSlots <= 0) break;

      // 取能加的最大元素数量
      const takeCount = Math.min(availableSlots, source.remaining.length);
      const chunk = source.remaining.splice(0, takeCount);
      currentChunk[source.key] = chunk;
      currentElementCount += takeCount;
    }

    result.push(currentChunk);
  }

  return result;
};

代码逻辑说明

  1. 先把原对象的每个属性转换成包含键、剩余数组的结构,方便后续追踪哪些元素还没处理。
  2. 循环处理直到所有属性的剩余数组为空:
    • 每次新建一个空对象作为当前拆分块。
    • 遍历还有剩余元素的属性,计算当前块还能装多少元素,从剩余数组里取出对应数量的元素加入当前块。
    • 当当前块元素总数达到 size 上限时,停止添加,把当前块放进结果数组。
  3. 最后返回拆分好的对象数组。

测试示例

const obj = {
  r: [1,2,3,4,5,6,7],
  p: [8,9,10,11,12,13,14],
  e: [15,16,17,18,19,20,21,22,23,24]
};

console.log(splitArray(obj, 10));
// 输出结果与示例一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 02:00:21