在JSON中按日期显示数组出现的次数

Display array occurrences by date in JSON

本文关键字:数组 显示 JSON 日期      更新时间:2023-09-26

我希望通过JSON数组进行迭代,以按日期查找给定项目的出现次数。为了说明这一点,我有以下JSON:

"data": [
    {
      "tags": [
        "foo",
        "bar",
        "hello",
        "world",
        "alice"
      ],
      "date": [
        1402876800000
      ],
      ...
    },
    {
      "tags": [
        "foo",
        "world",
        "alice"
      ],
      "date": [
        1402963200000
      ],
      ...
    }

我想做的是能够调用一个函数,该函数接受标签的输入(例如'foo'),并将该标签在特定日期出现的次数写入HTML。所以调用tagOverTime('foo')会得到这样的结果:

06/16/14 - 14次

06/17/14 - 8次

我也想格式化日期,但我相信我可以在某个时候用toLocaleDateString()自己做到这一点。就目前而言,我可以遍历数组,但不能进行其他操作。这是我目前所看到的:

$.getJSON('mydata.json', function(data) {
function containsObject(obj, list) {
    var i;
    for (i = 0; i < list.length; i++) {
        if (list[i] === obj) {
            return true;
        }
    }
    return false;
}
function tagOverTime(tagtosearch) {
  var output="<h4>" + tagtosearch + "</h4><ul>";
    for(var i = 0 ; i< data.data.length; i++){
        var obj = data.data[i];
        var tagsArray = obj["tags"];
          // make sure tag array isn't empty
          if( tagsArray != undefined ) {
          // then iterate through it
          for(var j = 0; j < tagsArray.length;j++ ){
            // if that tag exists in the given tags array, check its date and count up somehow
            if(tagsArray[j] == tagtosearch){
              output+='<li>' + obj.date + '</li>';
            }
          }
        }
    }
  output+="</ul>";
  document.getElementById("output").innerHTML=output;
}
tagOverTime('foo');

但我知道这是不对的,因为它只是输出一个无序的日期列表;我在编写代码时意识到了这一点,但不确定如何计算特定的日期。

function tagOverTime(tagToSearch) {
    var output="<h4>" + tagtosearch + "</h4><ul>";
    var byDate = {};
    for (var i = 0; i < data.data.length; i++) {
        var obj = data.data[i];
        var tagsArray = obj.tags;
        if (tagsArray && containsObject(tagToSearch, tagsArray) {
            if (byDate[obj.date]) { // Have we already seen this date?
                byDate[obj.date]++;
            } else { // No, initialize it to 1
                byDate[obj.date] = 1;
            }
        }
    }
    for (var date in byDate) {
        output += '<li>' + date + ' - ' + byDate[date] + ' occurrences</li>';
    }
    output += '</ul>';
    document.getElementById("output").innerHTML=output;
}