如何从 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
在 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