Javascript-按平面对象嵌套数组

时间:2019-11-10 10:50:20

标签: javascript group-by

我的对象具有有关表(行和列)位置的元数据

 {a:{row:0,col:0,data:{}},b:{row:1,col:0,data:{}},c:{row:1,col:1,data:{}},d:{row:2,col:0,data:{}},e:{row:2,col:1,data:{}}}

我想对对象进行重新排序以进行迭代并将其呈现为表(我正在使用React,但这并不重要)。
所以我的最终对象应该是这样的:

 [[{key:"a",data:{}}],[{key:"b",data:{}},{key:"c",data:{}}],[{key:"d",data:{}},{key:"e",data:{}}]]

我尝试(很多)使它优雅而美观,但没有成功(循环的结果太多),我相信有一些优雅的方法可以实现。

1 个答案:

答案 0 :(得分:1)

只需减少条目并以row / col作为嵌套数组的目标即可。

var data = { a: { row: 0, col: 0, data: {} }, b: { row: 1, col: 0, data: {} }, c: { row: 1, col: 1, data: {} }, d: { row: 2, col: 0, data: {} }, e: { row: 2, col: 1, data: {} } },
    result = Object.entries(data).reduce((r, [key, { row, col, data }]) => {
        r[row] = r[row] || [];
        r[row][col] = { key, data };
        return r;
    }, []);

console.log(result);