Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获得“的计数”;讯息;和不同的“计数”;名称“;从json使用javascript?_Javascript_Json_D3.js - Fatal编程技术网

如何获得“的计数”;讯息;和不同的“计数”;名称“;从json使用javascript?

如何获得“的计数”;讯息;和不同的“计数”;名称“;从json使用javascript?,javascript,json,d3.js,Javascript,Json,D3.js,我有一个json文件,如图所示: { "error": null, "data": [ { "serial_no": 1, "name": "HD Televizija", "id": "103525823050602_389832151148675", "date": "11/18/13 1:57", "message": "Zabava uz

我有一个json文件,如图所示:

{
    "error": null,
    "data": [
        {
            "serial_no": 1,
            "name": "HD Televizija",
            "id": "103525823050602_389832151148675",
            "date": "11/18/13 1:57",
            "message": "Zabava uz Philipsov Hue sustav rasvjete. cc Philips hue",
            "type": "photo",
            "like_count": 0,
            "comment_count": 0,
            "share_count": 0
        },
        {
            "serial_no": 2,
            "name": "Garmental",
            "id": "107057885997763_398139340317956",
            "date": "12/7/13 5:33",
            "message": "Setting the mood based on a photo? With Philips hue any photo on your smart phone becomes a palette to paint with light! Fabio Viviani is on to something!   Find out more HERE  http://bit.ly/1g7hAMy'",
            "type": "photo",
            "like_count": 0,
            "comment_count": 0,
            "share_count": 1
        },
        {
            "serial_no": 3,
            "name": "Expert Deurne",
            "id": "194564077345567_403082633156960",
            "date": "12/17/13 22:00",
            "message": "Nu een Philips India 55,
          "type": "link",
            "like_count": 0,
            "comment_count": 0,
            "share_count": 0
        }
我必须将消息的计数和名称的不同计数绘制为条形图,如下所示:

要绘制图表,我需要一个函数,该函数可以按月/按年计算消息总数和名称的不同计数。如何增加作为参数传递的日期值 我试过这个:

function(/*paramater*/) {
    var nameArray = data.countBy(data, function (data) { return data.name; });
    var nameCount = nameArray.length; //will give distinct count of names
    var msgCount = data.msg.length;
}

如何获取给定月份/年份的MSG计数和名称的不同计数???

您需要做的就是筛选日期上的对象数组,删除重复的名称并返回一个对象,该对象提供名称和消息的计数

function getData(obj, searchmonth, searchyear) {
    var arr = obj.data.filter(function (el) {
        var date = el.date.split(' ')[0].split('/');
        return searchmonth === date[0] && searchyear === date[2];
    });

    var unique = arr.reduce(function (p, c) {
      if (p.indexOf(c.name) < 0) p.push(c.name);
      return p;
    }, []);

    return { msgs: arr.length, names: unique.length };
}

// pass in the data object, month and year
getData(obj, '12', '13'); // { msgs: 3, names: 2 }
函数getData(obj、searchmonth、searchyear){
var arr=对象数据过滤器(功能(el){
var date=el.date.split(“”)[0]。split(“/”);
返回searchmonth==日期[0]&&searchyear==日期[2];
});
var unique=arr.reduce(函数(p,c){
如果(p.indexOf(c.name)<0)p.push(c.name);
返回p;
}, []);
返回{msgs:arr.length,name:unique.length};
}
//传入数据对象、月份和年份
getData(对象'12','13');//{msgs:3,name:2}
-请注意,在我的示例中,我添加了一个具有重复名称的额外对象,以显示其正常工作。

尝试此操作

var filterByMonthYear = function(m,y){
   return data.filter(function(x){
      var d = new Date(x.date)
      if((d.getMonth() + 1) == m && d.getYear() == y){
        return x;
      }
   })
}
var filtered = filterByMonthYear(12,13),
    msgs = [],
    names = [];

for(i in filtered){
  var t = filtered[i];
  if(t.message != ""){ // remove empty messages, remove this if you dont want.
    msgs.push(t.message);
  }
  if(t.name != ""){ // remove empty names, remove this if you dont want.
    names.push(t.name)
  }
}

// filter unique names
names = names.filter(function(name,index,self){
  return self.indexOf(name) === index;
})

var totalUniqueNames = names.length,
    totalMessage = msgs.length;

console.log(totalUniqueNames, totalMessage);

msg计数和name计数不一样吗?@Andy不,因为可能有同名但不同消息的条目。他希望它有唯一的名字