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

JavaScript中限制子数组长度并拆分同时间戳对象的方法

嵌套数组拆分:每个子数组最多3个对象且保持指定顺序

需求

将嵌套数组中的每个子数组按以下规则拆分:

  • 拆分后的每个子数组最多包含3个对象
  • 严格保持对象的原有顺序
  • 优先将末尾的不同时间戳对象与前面的同时间戳对象凑成满3个的子数组(如示例中第三个原数组的拆分逻辑)

现有数据

const results = 
 [
   [
    {id: 3337, data: "data", date: '2022-08-02T12:25:00.000Z'},
    {id: 3336, data: "data", date: '2022-08-02T12:24:00.000Z'},
    {id: 3335, data: "data", date: '2022-08-02T12:23:00.000Z'},
    {id: 3334, data: "data", date: '2022-08-02T12:22:00.000Z'}
   ],
   [
    {id: 4449, data: "data", date: '2022-07-15T12:25:00.000Z'},
    {id: 4448, data: "data", date: '2022-07-15T12:25:00.000Z'},
    {id: 4447, data: "data", date: '2022-07-15T12:25:00.000Z'},
    {id: 4446, data: "data", date: '2022-07-15T12:25:00.000Z'},
    {id: 4445, data: "data", date: '2022-07-15T12:25:00.000Z'},
    {id: 4444, data: "data", date: '2022-07-15T12:25:00.000Z'},
   ],
   [
    {id: 1117, data: "data", date: '2022-07-15T12:25:00.000Z'},
    {id: 1116, data: "data", date: '2022-07-15T12:25:00.000Z'},
    {id: 1115, data: "data", date: '2022-07-15T12:25:00.000Z'},
    {id: 1114, data: "data", date: '2022-07-15T12:25:00.000Z'},
    {id: 1113, data: "data", date: '2022-07-07T12:25:00.000Z'},
   ]
  ]

解决方案

通过反向分组再恢复顺序的方式实现需求,代码如下:

function splitNestedArrays(arr) {
  const finalResult = [];
  for (const subArr of arr) {
    // 反转原数组,从后往前分组
    const reversed = [...subArr].reverse();
    const groups = [];
    let currentGroup = [];
    for (const item of reversed) {
      if (currentGroup.length < 3) {
        currentGroup.push(item);
      } else {
        // 反转当前组恢复元素顺序,加入分组列表
        groups.push(currentGroup.reverse());
        currentGroup = [item];
      }
    }
    // 处理最后一个未填满的分组
    if (currentGroup.length > 0) {
      groups.push(currentGroup.reverse());
    }
    // 反转分组列表,恢复原数组的整体顺序
    finalResult.push(...groups.reverse());
  }
  return finalResult;
}

// 调用示例
const splitResult = splitNestedArrays(results);
console.log(splitResult);

逻辑说明

  1. 对每个原子数组进行反转,从末尾开始分组,确保末尾的元素优先凑成满3个的子数组
  2. 遍历反转后的数组,将元素加入当前分组,当分组达到3个元素时,反转分组恢复元素原有顺序并保存
  3. 处理完所有元素后,将分组列表反转,恢复原数组的整体顺序
  4. 将所有分组合并到最终结果中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:31:22