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

如何在JavaScript中交替合并两个数组?含RxJS及对象数组实现方案

数组交替合并实现方案

刚好之前也碰到过类似的需求,给你分享两种实用的实现思路,不管是基础数值数组还是对象数组都能轻松搞定~

一、基础数值数组的合并

1. 原生JavaScript实现(通用型)

先写一个通用的合并函数,不管数组元素类型是什么都能用,逻辑也很直观:循环遍历到两个数组中较长的那个长度,每次循环依次把两个数组对应位置的元素加入结果数组。

function alternateMerge(arr1, arr2) {
  const merged = [];
  // 取两个数组的最大长度,避免遗漏较长数组的剩余元素
  const maxLength = Math.max(arr1.length, arr2.length);
  
  for (let i = 0; i < maxLength; i++) {
    // 只要当前索引在数组范围内,就加入结果
    if (i < arr1.length) merged.push(arr1[i]);
    if (i < arr2.length) merged.push(arr2[i]);
  }
  
  return merged;
}

// 测试数值数组
const a1 = [0, 2, 4, 6, 8];
const a2 = [1, 3, 5, 7, 9];
const mergedNumbers = alternateMerge(a1, a2);
console.log(mergedNumbers); // 输出:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

2. RxJS实现

如果项目中已经在用RxJS,可以利用它的流操作来实现,代码更简洁:

import { zip, from } from 'rxjs';
import { mergeAll, toArray } from 'rxjs/operators';

// 将数组转为Observable流
const a1$ = from([0, 2, 4, 6, 8]);
const a2$ = from([1, 3, 5, 7, 9]);

zip(a1$, a2$) // 按位置配对两个流的元素,得到类似 [0,1], [2,3] 的数组流
  .pipe(
    mergeAll(), // 将配对后的数组展开为单个元素的流
    toArray() // 把流中的元素收集成最终数组
  )
  .subscribe(mergedArr => {
    console.log(mergedArr); // 输出目标合并数组
  });

二、对象数组的交替合并

其实刚才的通用方案完全适用于对象数组,因为不管元素是数值还是对象,push的逻辑是一致的,不需要额外修改:

1. 原生JavaScript实现

// 测试对象数组
const objArr1 = [
  {'name': 'Lucy'}, {'name': 'Lily'}, {'name': 'Jerry'}, 
  {'name': 'Tom'}, {'name': 'Smith'}
];
const objArr2 = [
  {'name': 'Jack'}, {'name': 'John'}, {'name': 'Anan'}, 
  {'name': 'Bob'}, {'name': 'Dav'}
];

// 直接复用之前的alternateMerge函数
const mergedObjects = alternateMerge(objArr1, objArr2);
console.log(mergedObjects);
// 输出:[{'name':'Lucy'}, {'name':'Jack'}, {'name':'Lily'}, {'name':'John'}, ... , {'name':'Smith'}, {'name':'Dav'}]

2. RxJS实现

同样复用RxJS的逻辑,只是把输入换成对象数组即可:

const objArr1$ = from(objArr1);
const objArr2$ = from(objArr2);

zip(objArr1$, objArr2$)
  .pipe(mergeAll(), toArray())
  .subscribe(mergedObjArr => {
    console.log(mergedObjArr);
    // 得到目标交替对象数组
  });

额外提一句:如果两个数组长度不一致,比如一个长一个短,上面的方案也能自动处理——先把短数组的元素交替完,再把长数组剩下的元素依次追加到结果里,逻辑很完善~

内容的提问来源于stack exchange,提问作者蒋建雨

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:28:25