Javascript 函数检查 JSON 对象上是否缺少日期

标签 javascript json date chart.js

我正处于学习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/

相关文章:

ios - 将 JSON 数组附加到数组中的值

date - 将日期在指定范围内的文件从一个目录复制到另一个目录

javascript - 使用 Mysql UNIX_TIMESTAMP() 到 JAVASCRIPT Date.UTC() 获得不同的结果

javascript - 我想使用 javascript 向元素插入属性

javascript - 为什么不可枚举属性不影响数组内置方法?

python - 这是什么类型的 JSON 对象? (Gitlab API), (Python)

jquery - 为什么数据还是空

javascript - 如何获得包含尺寸的宽度和高度?

ios - Swift 4 错误的日期和时间

php - 排序多维数组 (PHP) - 日期并发症和计数