我正处于学习javascript的菜鸟阶段。我制作了一个 API,它可以获取在特定日期注册的大量用户,并将这些数据作为 JSON 对象返回。这是该数据的示例
{"myjsonobject": [{"users": 3, "joined": "2013-05-25"}, {"users": 1, "joined": "2013-05-26"}, {"users": 1, "joined": "2013-05-30"}, {"users": 1, "joined": "2013-05-31"}]}
然后我解析 ChartJS 上的数据和图表使用下面的 javascript 函数绘制折线图
$(document).ready(function()
{
url = "http://mylink/getjson/"
Create_jsonObject(url)
});
function Create_jsonObject(url) {
$.getJSON(url, function (data) {
myJSONObject=data;
var dataSource=myJSONObject.myjsonoject;
var chart = $("#chartContainer").dxChart({
dataSource: dataSource,
commonSeriesSettings: {
argumentField: 'joined'
},
series: [
{ valueField: 'users', name: 'users' },
],
argumentAxis:{
grid:{
visible: true
}
},
tooltip:{
enabled: true
},
title: 'Volunteer Registration',
legend: {
verticalAlignment: 'bottom',
horizontalAlignment: 'center'
},
commonPaneSettings: {
border:{
visible: true,
right: false
}
}
});
});
};
该函数用于在线图上绘制 JSON 数据图表。我想合并一个 javascript 函数来检查缺少的日期并在缺少日期的地方插入 0 个用户。因此,图表将在未返回日期的地方绘制零。它应该对照返回的最早日期进行检查。有人有什么想法吗?
谢谢
最佳答案
如何填充描述范围的数组中缺失的元素
假设起始数组已经排序,您可能希望将源数组中的第一个元素复制到新数组中,然后迭代地将“默认对象”推送到目标数组中,或者在存在匹配时从源数组中复制目的。重复此操作,直到到达范围的末尾。
要检查是否存在匹配的对象,您可能需要首先通过要迭代的任何参数(在您的情况下:“joined”字段)对源数组进行索引。这意味着该参数必须是唯一的。
function getIndex(srcArray, field) {
var i, l, index;
index = [];
for(i = 0, l = srcArray.length; i < l; i++) {
index[srcArray[i][field]] = srcArray[i];
}
return index;
}
这会创建数组的 HashMap 。按元素的键(在您的情况下为“加入”字段)搜索元素非常简单:
if(index['2013-06-05'] !== undefined) {
/* the element indexed by "2013-06-05" exists */
}
现在您有了索引,您可以迭代您期望的范围。为此,获取源数组中的第一个和最后一个日期:
//get boundaries
var first = new Date(src[0].joined);
var last = new Date(src[src.length-1].joined);
您还需要知道如何构造默认对象:
function createDefault(datestr) {
return {users: 0, joined: datestr};
}
现在声明一个目标数组并迭代范围:
var dest = [];
for(var d = first; d.getTime() <= last.getTime(); d.setDate(d.getDate()+1)) {
datestr = dateToYMD(d); //dateToYMD is a helper function I declared that formats a date
if(index[datestr]) {
//this date exists in your data, copy it
dest.push(index[datestr]);
} else {
//this date does not exist, create a default
dest.push(createDefault(datestr));
}
}
我制作了一个 jsfiddle 将目标数组记录到控制台。 http://jsfiddle.net/uNasR/
关于Javascript 函数检查 JSON 对象上是否缺少日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16956063/