如何从 JS 中的数组中获取按天分组的每天值的总和?

How to get the sum of values per day grouped by day from an array in JS?

在 JS 中,给定一个对象数组,例如:

    [{
      date: 1525655429184,
      value: 20.00
    },{
      date: 1525655429184,
      value: 3.99
    },{
      date: 1526001029184,
      value: 19.00
    },{
      date: 1526001025184,
      value: 4.30
    }]

其中'date'属性是以毫秒为单位的日期,'value'属性是以浮点数表示的货币,这个数组的每个对象都可以是一个月中的某一天及其关联值。

我想获得每个工作日的 的总和,以在 x 天的总值图表中显示。

所以输出应该像这个例子:

    [
      { day: 'Sun', sum: 23.99 },
      { day: 'Mon', sum: 0 },
      { day: 'Tue', sum: 22.2 },    
      { day: 'Wed', sum: 22.3 },    
      { day: 'Thu', sum: 2.2 },    
      { day: 'Fri', sum: 32.2 },    
      { day: 'Sat', sum: 22.43 },    
    ]

一天中的毫秒数:

var millsperday = 1000*60*60*24;

当前 millisecond/day 偏移量:

var d = new Date();
var m = d.getTime(); 
d.setHours(0,0,0,0);
var o = d.getTime()-m;

所以,要划分一个列表(unixtime)毫秒:

for (i=0;i<list.length;i++) {
  numberofday = Math.floor((list[i]-o)/millsperday) ;
}

首先,您需要将 date(我相信以毫秒为单位)转换为日期并使用 getDay() 获取日期。创建天数数组,遍历天数,如果转换后的日期与天数相同,则对值求和。看看下面的片段。

var data = [{
  date: 1525655429184,
  value: 20.00
}, {
  date: 1525655429184,
  value: 3.99
}, {
  date: 1526001029184,
  value: 19.00
}, {
  date: 1526001025184,
  value: 4.30
}]
var days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
var sumVals = [];
var daysSum = [];

var sumVal = days.forEach(function(day) {
  var total = 0;
  data.forEach(function(items) {
    var d = new Date(items.date);
    var formattedD = days[d.getDay()];
    if (day === formattedD) {
      total += parseFloat(items.value);
    }
  })
  sumVals.push(total)
 daysSum.push([day, total])
})
console.log(days)
console.log(sumVals)
console.log(daysSum)//just to show if it matches