JS 如何多个一维Array 竖向拼成新的二维Array

思否 问答 已采纳 👍 3 含 AI 优化版

问题

JS 如何多个一维Array 竖向拼成新的二维Array

在 SegmentFault 查看原问题 →

由大模型辅助整理,保留原意,优化结构与可读性。

问题概述

有多个长度相同的一维数组,希望按“列”方向拼接成一个二维数组(即取每个数组相同下标的元素组成一组)。

涉及技术

JavaScript Array.prototype.map

期望结果

得到形如 [[a[0], b[0], c[0]], [a[1], b[1], c[1]], ...] 的二维数组。

回答

原始回答

a = [1,2,3,4,5]

b = [11,22,33,44,55]

c = [111,222,333,444,555]

a.map((v,i)=>[a,b,c].map(v=>v[i]))没难度,来下一题

AI 优化 · 回答整理

解答思路

以任意一个数组的下标作为基准,遍历该下标,再从每个原数组中取出对应下标的元素,组成新的一维数组,最终汇总成二维数组。

示例代码

const a = [1, 2, 3, 4, 5];
const b = [11, 22, 33, 44, 55];
const c = [111, 222, 333, 444, 555];

const result = a.map((_, i) => [a, b, c].map((arr) => arr[i]));

console.log(result);
// [[1, 11, 111], [2, 22, 222], [3, 33, 333], [4, 44, 444], [5, 55, 555]]

详细说明

  • 外层 a.map((_, i) => ...) 只是借用 a 的长度来遍历下标 i,实际值本身没有用到。
  • 内层 [a, b, c].map((arr) => arr[i]):对每一个数组取第 i 项,组成一个新的一维数组,也就是「竖着切一列」。
  • 这种写法本质上是矩阵的按列转置(transpose),如果数组数量或长度是动态的,也可以写成更通用的 transpose(matrix) 工具函数。

小结

利用嵌套 map 按下标取值,是将多个等长一维数组按列拼接成二维数组最简洁的写法。

由大模型辅助整理,保留原意,补充结构与代码格式。

回答转载自 SegmentFault

评论

评论功能即将开放。你也可以通过 邮件GitHub Issue 反馈。