首页 > 解决方案 > 如何在 HANA XS / Javascript 中以有效的方式转置混合数据数组

问题描述

我必须将 HANA 表的数据转换为要在其上创建json模型的数组,所以我有一个如下数组:

[COLOR, TYPE, INFO, DAY, VALUE]

COLOR、TYPE 和 DAY 是主键,所有键的句点都相同:

[BLACK,JEANS,Info01,2020-12-01,25], //start period
[BLACK,JEANS,Info01,2020-12-02,22],
[BLACK,JEANS,Info01,2020-12-03,18],
[BLACK,JEANS,Info01,2020-12-04,33], //end period
[WHITE,SHIRT,Info02,2020-12-01,15], //start period
[WHITE,SHIRT,Info02,2020-12-02,12],
[WHITE,SHIRT,Info02,2020-12-03,58],
[WHITE,SHIRT,Info02,2020-12-04,63], //end period

我想转置它以获得以下数组:

[BLACK,JEANS,Info01,25,22,18,33],
[WHITE,SHIRT,Info02,15,12,58,63],

有没有一种有效的方法来做到这一点?

标签: javascriptarraysmatrixtransposehana-xs

解决方案


假设按顺序排列相同的日期。

您可以对前三个项目使用连接键并收集值。

const
    data = [['BLACK', 'JEANS', 'Info01', '2020-12-01', 25], ['BLACK', 'JEANS', 'Info01', '2020-12-02', 22], ['BLACK', 'JEANS', 'Info01', '2020-12-03', 18], ['BLACK', 'JEANS', 'Info01', '2020-12-04', 33], ['WHITE', 'SHIRT', 'Info02', '2020-12-01', 15], ['WHITE', 'SHIRT', 'Info02', '2020-12-02', 12], ['WHITE', 'SHIRT', 'Info02', '2020-12-03', 58], ['WHITE', 'SHIRT', 'Info02', '2020-12-04', 63]],
    result = Object.values(data.reduce((r, a) => {
        const
            keys = a.slice(0, 3),
            key = keys.join('|');
        r[key] = r[key] || keys;
        r[key].push(a[4]);
        return r;
    }, {}));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读