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

JavaScript如何按规则提取值为数组的对象中的元素拼接数组

按固定规则轮询提取多数组元素拼接结果

需求规则

  • 遍历输入对象的所有键,每一轮遍历过程中,从每个键对应的数组里,取出前2个还没被提取过的元素
  • 重复执行多轮遍历,直到所有数组里的元素全部被提取完毕,最终把所有取出的元素按提取顺序拼成一个数组返回

可直接运行的实现代码

function extractAndConcat(sourceObj) {
  const result = [];
  // 整理所有待处理数组,给每个数组记录当前读取到的位置
  const arrayQueue = Object.keys(sourceObj).map(key => ({
    data: sourceObj[key],
    cursor: 0
  }));

  while (true) {
    let hasUnread = false;
    for (const item of arrayQueue) {
      // 每次最多取2个元素
      const picked = item.data.slice(item.cursor, item.cursor + 2);
      if (picked.length) {
        hasUnread = true;
        result.push(...picked);
        item.cursor += 2;
      }
    }
    // 本轮没取到任何内容,说明全部读完了
    if (!hasUnread) break;
  }

  return result;
}

// 测试输入
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 }
  ]
};

// 执行后输出和预期结果完全一致
console.log(extractAndConcat(object));

实现说明

  • 代码不会修改原始输入的对象和内部数组,无副作用
  • 自动兼容不同长度的数组:如果某个数组剩余元素不足2个、或者已经被读完,会自动取剩余所有元素/直接跳过,不会抛出异常
  • 键的遍历顺序遵循Object.keys()的默认遍历规则,和示例中a→b→c的提取顺序完全匹配,输出结果和预期一致

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

相关产品推荐
方舟 Agent Plan

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

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