对于这种数组操作,是否有一种有效的方法 JS?

问题描述

我有一个数组数组,如下所示:

[
  [val-1-1,val-1-2],[val-2-1,val-2-2],[val-3-1,val-3-2],...
  [val-n-1,val-n-2]
]

数组可能很长,我想要实现的是将这个数据结构“拆分”为两个数组,如下所示: [val-1-1,val-2-1,val-3-1,... val-n-1][val-1-2,val-2-2,val-3-2,... val-n-2]

我正在寻找一种有效的方法来执行此操作。我知道通过循环和使用索引这在技术上很容易,但我想知道是否有一种有效的方法可用于此任务,因为初始数组很长而且我还有多个这些初始数组数组,因此循环可能需要不必要的长时间。

解决方法

对于每一列,只需检查结果中是否有该列的数组,如果已经有数组,则只需推送元素,否则创建一个新数组然后推送。

const transpose = (arr) =>
    arr.reduce(
      (m,r) => (r.forEach((v,i) => ((m[i] ??= []),m[i].push(v))),m),[]
    ),matrix = [
    [1,2,3],[1,];

console.log(transpose(matrix));