问题描述
[
[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));