gpt4 book ai didi

javascript - Jquery 或 PHP 按日期字段对对象数组进行分组

转载 作者:行者123 更新时间:2023-11-28 23:30:11 25 4
gpt4 key购买 nike

所以我有包含用于创建图表(使用 Canvas.js)的格式化数据的 json 响应,它是一个对象数组,每个对象都包含 y 值(它是 int)和标签(它是 SQL 日期,比如 2016- 02-06).

我需要的是按日期对这些值进行分组并从中获取平均值。数据按日期排序。问题是,一天的点数可能是随机的,而另一天可能根本没有任何点数。所以,我需要一种周指数(计算一年中的第几周不是解决方案,因为可以有很多年)。例如,我可以有以下数组:

[0] {y: 2; label: 2016-04-01} // this is week 1 from the start of the array
[2] {y: 6; label: 2016-04-02} // this is still week 1
[3] {y: 1; label: 2016-04-13} // this is week 2
[4] {y: 10; label: 2016-04-28} // this is week 3, if we count weeks only by appearance in the array, not by their actual position
[5] {y: 2; label: 2016-05-01} // this is week 4
[6] {y: 4; label: 2016-05-02} // still week 4

所以我需要以某种方式获得这些星期,然后找到平均 y 值,所以从上面的数组我会得到:

[0] {y: 4; label: 2016-04-01}
[2] {y: 1; label: 2016-04-13}
[3] {y: 10; label: 2016-04-28}
[4] {y: 3; label: 2016-05-01}

如何处理?我想我应该使用 PHP 方法并放弃尝试在前端制作它,或者可能有更简单的方法来处理这个问题?或者也许有js图表插件可以自动分组?如果有任何可能的帮助,我将不胜感激!

最佳答案

在 Javascript 中,您可以使用对象进行收集,并使用数组作为结果。

该提案利用了 RobG 的答案至 Get week of year in JavaScript like in PHP .

后面的代码是分组部分,取年和周数,收集数据进行平均计算。

// taken from https://stackoverflow.com/a/6117889/1447675
Date.prototype.getWeekNumber = function () {
var d = new Date(+this);
d.setHours(0, 0, 0);
d.setDate(d.getDate() + 4 - (d.getDay() || 7));
return Math.ceil((((d - new Date(d.getFullYear(), 0, 1)) / 8.64e7) + 1) / 7);
};

var data = [{ y: 2, label: '2016-04-01' }, { y: 6, label: '2016-04-02' }, { y: 1, label: '2016-04-13' }, { y: 10, label: '2016-04-28' }, { y: 2, label: '2016-05-01' }, { y: 4, label: '2016-05-02' }],
avg = [];

data.forEach(function (a) {
var year = a.label.slice(0, 4),
week = new Date(a.label).getWeekNumber(),
key = year + '|' + week;

if (!this[key]) {
this[key] = { count: 0, sum: 0, result: { y: 0, label: a.label } };
avg.push(this[key].result);
}
this[key].count++;
this[key].sum += a.y;
this[key].result.y = this[key].sum / this[key].count;
}, Object.create(null));

console.log(avg);

关于javascript - Jquery 或 PHP 按日期字段对对象数组进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37613482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com