如何获得“的计数”;讯息;和不同的“计数”;名称“;从json使用javascript?
我有一个json文件,如图所示:如何获得“的计数”;讯息;和不同的“计数”;名称“;从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
{
"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不,因为可能有同名但不同消息的条目。他希望它有唯一的名字