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

如何轮询遍历对象内数组每次取2个元素直至末尾生成目标数组

按轮次批量提取数组成员的合并实现

需求规则

  • 输入为属性值均是数组的对象,最终返回全新的合并结果数组,不修改原对象和原数组
  • 遍历逻辑:按对象自身键的遍历顺序,每一轮依次从每个键对应的数组中,提取2个尚未处理的元素加入结果数组
  • 单轮走完所有键的遍历后,重复上述批量提取操作,直到所有数组的元素全部处理完成

示例输入

const object = {
  a: [
    { name: "John", age: 32 },
    { name: "David", age: 23 },
    { name: "Justin", age: 28 },
    { name: "Arnauld", age: 35 }
  ],
  b: [
    { name: "Ivan", age: 18 },
    { name: "Nekko", age: 13 },
    { name: "Lena", age: 25 }
  ],
  c: [
    { name: "Ann", age: 19 },
    { name: "Nick", age: 14 }
  ]
};

期望输出

[
  { name: "John", age: 32 },
  { name: "David", age: 23 },
  { name: "Ivan", age: 18 },
  { name: "Nekko", age: 13 },
  { name: "Ann", age: 19 },
  { name: "Nick", age: 14 },
  { name: "Justin", age: 28 },
  { name: "Arnauld", age: 35 },
  { name: "Lena", age: 25 }
]

实现代码

function batchMerge(sourceObj, step = 2) {
  const merged = [];
  const allArrays = Object.values(sourceObj);
  let offset = 0;

  while (true) {
    let hasRemaining = false;
    for (const list of allArrays) {
      const currentBatch = list.slice(offset, offset + step);
      if (currentBatch.length) {
        hasRemaining = true;
        merged.push(...currentBatch);
      }
    }
    if (!hasRemaining) break;
    offset += step;
  }

  return merged;
}

// 调用测试
const result = batchMerge(object);

代码逻辑说明:

  • 用offset记录每轮截取的起始位置,初始为0
  • 每轮遍历所有数组,从offset位置开始截取长度为2的片段,有内容就追加到结果里,同时标记还有未处理元素
  • 如果某一轮遍历完所有数组都没取到元素,说明所有元素处理完毕,直接返回结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:54:27