我的页面上有一些复选框,分为 3 列。然而,它们是按字母顺序排序的,而是跨行排列。
当前发生的事情:
A B C
D E F
G H I
我想要发生什么:
A D G
B E H
C F I
现在我已经有了这段代码来解决这个问题,但是当数组中有余数时我感到非常困惑,并且我不知道如何将其包含到排序中而不弄乱它:
organizedCheckboxesArea() {
let quotient = Math.floor(this.areas.length/3);
let remainder = this.areas.length % 3;
let organizedColumns = [];
for(let i = 0 ; i < quotient; i++) {
organizedColumns.push(this.areas[i]);
organizedColumns.push(this.areas[quotient + i]);
organizedColumns.push(this.areas[(quotient * 2) + i]);
}
return organizedColumns;
},
这让我很沮丧,因为我知道解决方案很简单,但我就是想不出。
编辑:这不是二维数组。它是['A'、'B'、'C'、'D'等...]。
此外,当有余数时,我希望它堆叠到左侧两列。即 ABCDEFGHIJ 会使得:
A E H
B F I
C G J
D
ABCDEFGHIJK 会:
A E I
B F J
C G K
D H
最佳答案
您可以切换索引并获得一个新数组。
var data = [['A', 'B', 'C'], ['D', 'E', 'F'], ['G', 'H', 'I']],
result = data.reduce((r, a, j) => {
a.forEach((v, i) => {
r[i] = r[i] || [];
r[i][j] = v;
});
return r;
}, []);
result.forEach(a => console.log(...a));
关于javascript - 如何重新组织数组,使其按列而不是按行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60207995/