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

如何实现按指定数量拆分对象数组为二维数组(用于分页)

数组按指定数量分组的实现需求

给定如下对象数组:

[
  {
    "id": "34285952",
    "labs": [
      {
        "id": "13399-17",
        "location": "Gambia",
        "edge": ["5062-4058-8562-2942-2107-2064-58"]
      }
    ]
  },
  {
    "id": "85130775",
    "labs": [
      {
        "id": "52504-72",
        "location": "Nepal",
        "edge": [
          "5232-9427-8339-7218-3936-9389-52",
          "6375-9293-7064-5043-6869-4773-65",
          "8547-4739-6334-3896-7208-8243-67"
        ]
      }
    ]
  },
  {
    "id": "67817268",
    "labs": [
      {
        "id": "17891-68",
        "location": "U.S.",
        "edge": [
          "6383-7536-7257-4713-9494-9910-93",
          "6743-8803-1251-1173-5133-2107-19"
        ]
      }
    ]
  },
  // 更多对象省略
]

需要实现一个函数,接收数组和数字参数(比如10),将原数组按指定数量合并为二维数组。例如原数组有22个对象时,会拆分为3个数组(前两个各10个,最后一个2个)。

输入示例(8个空对象):

[ { }, { }, { }, { }, { }, { }, { }, { } ]

按数量2分组的输出示例:

[ [ { }, { } ], [ { }, { } ], [ { }, { } ], [ { }, { } ] ]

现有初步代码但逻辑不完整:

// array = 上述示例数组
// countOption = 10

const splitArrayByCount = (array, countOption) => {
  return array.map(object => {
    if (array.length > countOption) {
      return [object]
    }
  })
};

完整解决方案

可以通过循环遍历原数组,按指定数量截取子数组来实现,代码如下:

const splitArrayByCount = (array, countOption) => {
  // 处理边界情况:空数组直接返回空,分组数小于1时返回原数组的包装
  if (!array.length) return [];
  if (countOption < 1) return [array];

  const result = [];
  // 计算总组数,向上取整保证最后一组元素不足时也能被保留
  const totalGroups = Math.ceil(array.length / countOption);

  for (let i = 0; i < totalGroups; i++) {
    const startIndex = i * countOption;
    // 截取当前组的子数组,slice超出数组长度时会自动取到末尾
    const group = array.slice(startIndex, startIndex + countOption);
    result.push(group);
  }

  return result;
};

代码说明

  • 边界处理:提前过滤空数组和非法分组数量的情况,避免无效计算。
  • 组数计算:用Math.ceil计算总组数,确保哪怕最后一组元素数量不足指定值,也能单独成为一组。
  • 子数组截取:通过slice方法按索引范围截取元素,该方法不会修改原数组,且当结束索引超出数组长度时,会自动截取到数组末尾,适配最后一组的情况。

测试示例

// 测试8个元素按2分组
const testArray = [{}, {}, {}, {}, {}, {}, {}, {}];
console.log(splitArrayByCount(testArray, 2));
// 输出:[[{},{}], [{},{}], [{},{}], [{},{}]]

// 测试22个元素按10分组
const longArray = Array.from({length:22}, (_, idx) => ({id: idx}));
console.log(splitArrayByCount(longArray, 10));
// 输出:[[...10个元素], [...10个元素], [...2个元素]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 05:55:02