我有一些看起来像这样的JSON ......
{"appJSON": [
{
"title":"Application Title",
"category":"Business",
"industry":"Retail",
"language":"English",
"tags":[
{"tags":"Sales"},{"tags":"Reporting"},{"tags":"Transportation"},{"tags":"Hospitality"}
],
},
{
"title":"Airline Quality Assurance",
...
...
...]}
我正在循环使用JSON来获取数据中所有唯一标记的数组。
我的问题是,现在我在JSON中有一系列不同的唯一标签,如何最好地确定每个标签出现的次数?
所以基本上我正在寻找生成JSON中已找到的所有标签的列表(我已经拥有),每个标签出现的次数(我还没有)。
提前多多感谢!
答案 0 :(得分:2)
我假设当你找到一个新标签时,你会检查你是否已经在那里找到了那个标签。如果不这样做,则将其添加到列表中。为什么不检查做什么。
var nextTag=//get the next tag in the JSON list
var newTag=true;
for(var i=0;i<tags.length;i++){
if(nextTag === tags[i]){
tagCount[i]++;
newTag=false;
break;
}
}
if(newTag){
tags[tags.length]=nextTag;
tagCount[tagCount.length]=1;
}
这使用两个数组,其中tagCount[i]
是tags[i]
中标记出现的次数。您可以使用一个对象来执行此操作,或者您可以使用。
答案 1 :(得分:1)
作为替代方案,这里有一个填充关联数组的函数;键将是标记,值将是该标记的出现次数。
var tagCounts = []; // Global variable here, but could be an object property or any array you like really
function countTags(tags, tagCounts)
{
$.each(tags, function(i, item) {
var tag = item.tags; // This would change depending on the format of your JSON
if(tagCounts[tag] == undefined) // If there's not an index for this tag
tagCounts[tag] = 0;
tagCounts[tag]++;
});
}
所以你可以在任意数量的标签数组上调用这个函数,传入你的tagCounts(totals)数组,它会聚合总数。
var tags1 = [{"tags":"Sales"},{"tags":"Reporting"},{"tags":"Transportation"},{"tags":"Hospitality"}];
var tags2 = [{"tags":"Reporting"},{"tags":"Transportation"}];
var tags3 = [{"tags":"Reporting"},{"tags":"Hospitality"}];
countTags(tags1, tagCounts);
countTags(tags2, tagCounts);
countTags(tags3, tagCounts);
然后你可以这样读出来:
for(var t in tagCounts)
// t will be the tag, tagCounts[t] will be the number of occurrences
这里的工作示例:http://jsfiddle.net/UVUrJ/1/
qw3n的回答实际上是一种更有效的处理方式,因为你只需要遍历所有标记一次 - 但除非你有一个非常庞大的JSON源,否则差别不会很明显。