我有类似的东西
{
1489330777089: 100, // 12 March
1489330824346: 45, // 12 March
1489330877089: 90, // 13 March
1489330824346: 120, // 13 March
.....
}
密钥来自Date.now()
,因为它们已创建,值为整数。
我想将这些数据绘制成图表,例如条形图,其中日期为x轴。
如何使用Javascript将这些数据分组到日期中,将整数值汇总在一起。预期结果为:
{
12 March 2017: 145 // 100 + 45
13 March 2017: 210 // 90 + 120
...
}
(我在React应用中使用此功能,如果需要注意这一点。另外,使用Firebase存储数据)
谢谢!
答案 0 :(得分:0)
这会遍历这些值,将它们截断为一天,并使用分组值的总和进行输出
let source = {
1489330777089: 100,
1489330824346: 45,
1489330877089: 90,
1489330824346: 120,
}
let grouped = Object.keys(source).reduce((output, key) => {
let date = new Date(Number(key)),
groupedDate = new Date(date.getFullYear(), date.getMonth(), date.getDay());
if (typeof output[groupedDate] === 'undefined') output[groupedDate] = 0;
output[groupedDate] += source[key];
return output;
}, {});
您可能想要更改输出属性字符串/运算符/截断单位,但通过上面代码中的小改动,这应该很容易。
答案 1 :(得分:0)
您可以使用ISO日期进行分组。也许你需要在正确的当地时间使用一个.set。
var data = { 1489330777089: 100, 1489330824346: 45, 1489330877089: 90, 1489330824346: 120 },
grouped = {};
Object.keys(data).forEach(function (k) {
var date = (new Date(+k +1000*60*60*24)).toISOString().slice(0, 10);
grouped[date] = grouped[date] || 0;
grouped[date] += data[k];
});
console.log(grouped);

答案 2 :(得分:0)
你可以这样做
var date_obj={
1489330777089: 100, // 12 March
1489330824346: 45, // 12 March
1489330877089: 90
}
var tempData = {};
for ( var index in date_obj ) {
if ( date_obj[index] != "undefined" ) {
var milisec= parseInt(index);
var get_data= new Date(milisec);
var str_date=get_data.toString();
var date_str= str_date.substr(0,15);
if(typeof(tempData[date_str])=== "undefined"){
tempData[date_str] = parseInt(date_obj[index]);
}else{
tempData[date_str] = tempData[date_str]+parseInt(date_obj[index]);
}
}
}
data = tempData;
console.log(data);