javascript - 如何重新组织数组,使其按列而不是按行排序

标签 javascript

我的页面上有一些复选框,分为 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/

相关文章:

javascript - 在 JQuery 中创建列表

javascript - JQuery 将 HTML 重写为文本

javascript - 无法执行通过 .htaccess 保护的 JavaScripts 文件

javascript - 单击选择按钮上的选项时如何显示图像?

javascript - setInterval 过快

javascript - Twilio 聊天 API,getUnconsumedMessagesCount 始终为 0

javascript - 元刷新和保存过程冲突

javascript - 在 Canvas 中创建多个可拖动的圆圈

javascript - AngularJS 中的 Promise then 和绑定(bind)有什么区别?

javascript - 在 JavaScript 中处理可选返回值的最佳方法是什么?