我有一些看起来像这样的数据:
{
"data": [
{
"tags": [
"design",
"development",
"code",
"foo",
"bar"
],
"views": [
"81"
]
...
},
{
"tags": [
"design",
"foo",
"photoshop",
"alice",
"bob"
],
"views": [
"28"
]
...
}
我希望做的是遍历每个数据项,计算标签,然后显示每个数据项的出现次数。不过,我不想手动查询每个标签。
理想情况下,我希望它显示如下:
foo: 2
design: 2
alice: 1
等等。最终,我希望使用Highcharts,Amcharts或类似的东西将它合并到图表中?
我最接近的是这个,取自本网站上的另一个解决方案(这并没有创建一个完整的显示,但我首先试图掌握自己计算值,以任何可能的方式) :
$.getJSON('myarray.json', function(data) {
var occurrences = 0;
for (var i = 0; i < data.data.length; i++) {
if (data.data[i].tags == "foo") {
occurrences++;
}
}
console.log(occurrences);
});
但是这个输出不正确。任何帮助都将不胜感激。再一次,我想查看每个数据集的标记,并输出每个数据集发生次数的计数(理想情况下按降序排列)。
答案 0 :(得分:0)
if (data.data[i].tags.indexOf("foo") != -1)
答案 1 :(得分:0)
您正确遍历每个项目,但您忘记了每个项目中的“标签”也是项目列表。
$.getJSON('myarray.json', function(data) {
var tagcount = {};
for (var i = 0; i < data.data.length; i++) {
var item = data.data[i];
if( item.tags != undefined ) {
for (var j = 0; j < item.tags.length; j++) {
var tag = item.tags[j];
if( tagcount[tag] == undefined ) {
tagcount[tag] = 1;
} else {
tagcount[tag]++;
}
}
}
}
console.log(tagcount);
});
答案 2 :(得分:0)
您可以通过迭代数据获得所需的结果,我已经将您的数据作为示例:
var data = {
"data": [{
"tags": [
"design",
"development",
"code",
"foo",
"bar"],
"views": [
"81"]
}, {
"tags": [
"design",
"foo",
"photoshop",
"alice",
"bob"],
"views": [
"28"]
}]
};
然后我们可以像这样迭代它:
var countArray = [];
$.each(data.data, function(dataKey, dataValue) {
$.each(dataValue.tags, function(tagKey, tagValue) {
if( !(tagValue in countArray) ) {
countArray[tagValue] = 1;
} else {
countArray[tagValue]++;
}
});
});
将输出控制台日志
console.log(countArray);
[design: 2, development: 1, code: 1, foo: 2, bar: 1…]
jsFiddle:http://jsfiddle.net/602puhja/
答案 3 :(得分:0)
var result = {};
for(var i = 0; i < data.length; i++){
for(var j = 0; j < data[i].tags.length; j++){
var prop = data[i].tags[j];
result[prop] = !result[prop] ? 1 : result[prop] + 1;
}
}
console.log(result);
// Object {design: 2, development: 1, code: 1, foo: 2, bar: 1…}
答案 4 :(得分:0)
您必须使用字典计算所有出现次数,然后将其滚动到数组中并对其进行排序(如果您想要与输出结果相同:
// this will count per string each occurrence
var occurrencies = {};
function fetchAndSort(data) {
var i,j;
for (i = 0; i < data.data.length; i++) {
var tags = data.data[i].tags;
// now iterate inside tags
for( j=0; j < tags.length; j++){
// if there's not yet an entry in the dictionary, just create it
if(!occurrencies[tags[j]]){
occurrencies[tags[j]] = 0;
}
occurrencies[tags[j]]++;
}
}
// at this point there's an object with all the keys and the relative count
// if you want an ordered list you have to use an array because iterate on object
// keys in JS [doesn't guarantee any order][1]
var array = [];
for( i in occurrencies ){
array.push({name: i, count: occurrencies[i]});
}
// now sort it
array.sort(function(entry1, entry2){
// sort the array descending
return entry2.count - entry1.count;
});
for( i = 0; i<array.length; i++){
console.log(array[i].name + ':' + array.count);
}
};
$.getJSON('myarray.json', fetchAndSort);
由于解释目的,解决方案有点长。您可以通过缩短一些位来实现并优化您的需求。