如果我每天都要格式化数据,是否有一个干净的地图/缩小/过滤器链可以为我提供该数据的每周总计和平均值?
我有这样的数据:
data = [
["2020/04/28 GMT", "25"],
["2020/04/29 GMT", "6"],
["2020/04/30 GMT", "40"],
["2020/05/01 GMT", "1"],
["2020/05/02 GMT", "0"],
["2020/05/03 GMT", "1"],
["2020/05/04 GMT", "8"],
["2020/05/05 GMT", "27"],
["2020/05/06 GMT", "4"],
["2020/05/07 GMT", "14"],
["2020/05/08 GMT", "1"],
["2020/05/09 GMT", "4"],
["2020/05/10 GMT", "0"],
["2020/05/11 GMT", "4"],
["2020/05/12 GMT", "19"],
["2020/05/13 GMT", "6"]
]
首先,我将其映射以获取其所在的星期(我不想要一年中的星期,我想要7天的“大块”数据。
MAP = data.map((m, idx) => {
m[0] = parseInt(idx / 7)
return m;
})
哪个给我:
[
[ 0, '25' ], [ 0, '6' ],
[ 0, '40' ], [ 0, '1' ],
[ 0, '0' ], [ 0, '1' ],
[ 0, '8' ], [ 1, '27' ],
[ 1, '4' ], [ 1, '14' ],
[ 1, '1' ], [ 1, '4' ],
[ 1, '0' ], [ 1, '4' ],
[ 2, '19' ], [ 2, '6' ]
]
下一步要按周汇总结果?
我希望能得到类似的东西:
[0,81]
[1,54]
[2,25]
到目前为止,我最好的是:
MAP = tmp.data.map((m, idx) => {
m[0] = parseInt(idx / 7)
return m;
})
.reduce((sum, d) => {
if (typeof sum[d[0]] == "undefined") sum[d[0]] = 0;
sum[d[0]] = parseInt(d[1]) + parseInt(sum[d[0]])
return sum;
},{})
有什么方法可以消除该kludgy if子句将其初始化为0(如果未定义)?我觉得必须有更好的方法...
我知道当我看到代码时,就会被它的优雅迷住了……
谢谢。
我在lambda Node 13环境中进行此操作,如果可能的话,宁愿不使用外部库,但会考虑这样做,因为它可以使诸如趋势线,求和/平均值/中位数等计算变得更加容易,特别是在喂枣时。像Node Pandas一样?