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

如何高效实现多数组垂直遍历并生成目标输出序列?

如何按垂直方向合并多个数组元素?

嘿,这个按垂直方向取数组元素的需求很实用,我来给你拆解下最有效的实现思路和代码~

先明确下需求:我们有三个数组

array1 = [1,2,3,4];
array2 = [5,6,7];
array3 = [8,9,10,11];

需要生成输出序列:1,5,8,2,6,9,3,7,10,4,11,对应垂直方向的取数逻辑就像下面这个表格展示的:

数组1数组2数组3
158
269
3710
411

核心实现思路

最直接高效的方式就是按索引遍历,逐行收集元素:

  1. 先找到所有数组里最长的那个的长度,这是我们需要遍历的总次数
  2. 从索引0开始,依次检查每个数组在当前索引是否有元素,有就加入结果集合
  3. 最后把结果集合转成你需要的字符串格式

具体代码实现(JavaScript)

针对固定3个数组的版本

const array1 = [1,2,3,4];
const array2 = [5,6,7];
const array3 = [8,9,10,11];

// 第一步:获取最长数组的长度
const maxLength = Math.max(array1.length, array2.length, array3.length);
const result = [];

// 第二步:按索引遍历,逐个收集元素
for (let i = 0; i < maxLength; i++) {
  if (i < array1.length) result.push(array1[i]);
  if (i < array2.length) result.push(array2[i]);
  if (i < array3.length) result.push(array3[i]);
}

// 第三步:转成目标字符串格式
const output = result.join(',');
console.log(output); // 输出:1,5,8,2,6,9,3,7,10,4,11

支持任意数量数组的通用版本

如果以后需要处理更多数组,这个版本更灵活:

// 把所有数组放到一个集合里
const arrays = [[1,2,3,4], [5,6,7], [8,9,10,11]];
// 获取最长数组的长度
const maxLength = Math.max(...arrays.map(arr => arr.length));
const result = [];

// 遍历每个索引,再遍历每个数组收集元素
for (let i = 0; i < maxLength; i++) {
  arrays.forEach(arr => {
    if (i < arr.length) result.push(arr[i]);
  });
}

console.log(result.join(',')); // 同样输出目标序列

为什么这个方式高效?

  • 时间复杂度最优:是O(n*m),其中n是最长数组的长度,m是数组的个数。因为我们必须遍历每个元素至少一次,这已经是理论上的最小复杂度了。
  • 空间复杂度可控:只需要一个结果数组来存储所有元素,空间复杂度是O(k)(k是所有元素的总个数),没有额外的冗余开销。

内容的提问来源于stack exchange,提问作者Daniel O Mensah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:26:47