Как мне отсканировать JSON с помощью jquery, чтобы определить количество экземпляров определенной строки? - PullRequest
0 голосов
/ 03 августа 2010

У меня есть какой-то 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 (который у меня уже есть) с количеством раз, когда каждый из них встречается (которого у меня еще нет).

Заранее большое спасибо!

Ответы [ 2 ]

2 голосов
/ 03 августа 2010

Я предполагаю, что когда вы найдете новый тег, вы проверяете, есть ли у вас этот тег где-нибудь.Если вы не добавите его в свой список.Почему бы не при проверке сделать что-то вроде.

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 голос
/ 03 августа 2010

В качестве альтернативы, вот функция, которая заполнит ассоциативный массив; ключи будут тегами, а значения - количеством вхождений этого тега.

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 (итоги), и он будет агрегировать итоги.

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-источника, разница не будет заметна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...