我在java中运行查询以获取一个时间间隔内的调用数量,此查询的结果是:
Date(dd/mm/yyyy) | calls
_____________________|___________
17/05/18 | 30
16/05/18 | 36
10/05/18 | 14
27/04/18 | 12
26/04/18 | 90
但是当我使用图表js绘制结果时,数据按以下顺序显示
Date(dd/mm/yyyy) | calls
_____________________|___________
10/05/18 | 14
26/04/18 | 90
27/04/18 | 12
16/05/18 | 36
17/05/18 | 30
¿如何使用javascript按日期排序此JSON?
{2018-05-10: "14", 2018-04-26: "90", 2018-04-27: "12", 2018-05-16: "36", 2018-05-17: "30"}
答案 0 :(得分:0)
首先,您的JSON无效。必须将这些属性名称(日期)作为字符串引用才能使其有效。
现在,解决此问题的最佳方法是将您生成的JSON实际更改为数组:
data = [
{ "date": "2018-05-10", "hits": "14" },
{ "date": "2018-04-26", "hits": "90" },
// etc
];
如果你在服务器上生成这个,这应该很容易改变,那么在客户端处理它应该会容易得多。事实上,如果您可以将服务器上的日期格式设置为YYYY-MM-DD
,那么,如上所述,Chart.js应该会自动将其理解为日期,您只需将其映射到x
轴即可。像...
let data = ... // The array above
let chartData = data.map(function(p) {
return { x: p.date, y: p.hits };
});
var chart = new Chart(ctx, {
type: '...',
data: chartData,
// etc
});
如果由于某种原因你不能改变所生成的JSON的格式(当然,你仍然引用日期以使JSON有效),那么你可以尝试这样的事情:
let data = ... // Your JSON corrected to be valid
let chartData = Object.keys(data).map(function(k) {
let date = k.split('/').reverse().join('-');
return { x: date, y: data[k] };
});
var chart = new Chart({
type: '...',
data: chartData,
// etc
});