2015-04-16 2 views
-1

У меня есть объект JSON allDataJson, которые имеют около 500 объектов и выглядят следующим образом:счетных некоторые элементы JSON

[{"Researchers":"Karri, Ismo","Year":"2013","Title":"A"}, 
{"Researchers":"Grigori, Ahmed, Roope, Arto, Daisuke, Arasawa,IkeHama","Year":"2015","Title":"B"}, 
{"Researchers":"Grigori, Ahmed, Roope, Arto, Daisuke","Year":"2015","Title":"C"}, 
{"Researchers":"Grigori, Ahmed, Roope, Arto, Daisuke","Year":"2014","Title":"D"}] 

Мне нужно создать еще один объект JSON со следующей структурой:

var json =[ 
     {"Published": [[2013, 1]], 
     "Total": 1, 
     "Researcher": "Karri"}, 
     {"Published": [[2015, 2], [2014, 1]], 
      "Total": 3, 
      "Researcher": "Grigori"} 
     //for all of the researchers] 

(Например, Карри опубликовал 1 статью в 2013 году, Григорий опубликовал 2 статьи в 2015 году и 1 статью в 2014 году и т. Д.)

До сих пор я мог только нажать «Всего» и «Исследователь» n ames to json object следующим образом. Любые идеи о том, как продвигать опубликованные значения к объекту Json?

Вот мой код:

function FlowChartJson(fullnames, allDataJson){ 

    var occurences = { }; 
    var json =[]; 

    for (var i = 0; i < fullnames.length; i++) { 
     if (typeof occurences[fullnames[i]] == "undefined") { 
      occurences[fullnames[i]] = 1; 
     } else { 
      occurences[fullnames[i]]++; 
     } 
    } 

    for(var name in occurences){ 
     json.push(
      {"Researcher":name, 
       "Total":occurences[name] 
      }); 

    } 
    return json; 
} 
+0

'{«Исследователи»:" Григорий , Ахмед, Роуп, Арто, Дайсуке »,« Год »:« 2015 »,« Название »:« С »}' - много исследователей. Итак, я предполагаю, что все должны быть разделены. –

ответ

0

Я сделал некоторые кодирования. Посмотрите на него, и дайте мне знать, если это то, что вы хотите :)

var allDataJson = [{"Researchers":"Karri, Ismo","Year":"2013","Title":"A"}, 
 
{"Researchers":"Grigori, Ahmed, Roope, Arto, Daisuke, Arasawa,IkeHama","Year":"2015","Title":"B"}, 
 
{"Researchers":"Grigori, Ahmed, Roope, Arto, Daisuke","Year":"2015","Title":"C"}, 
 
{"Researchers":"Grigori, Ahmed, Roope, Arto, Daisuke","Year":"2014","Title":"D"}]; 
 

 

 
var formatted = allDataJson.reduce(function (prev, value) { 
 

 
    var researcher, 
 
     researcherObj, 
 
     researchers = value.Researchers.split(','); 
 
    for (var i = 0; i < researchers.length; i++) { 
 

 
     researcher = researchers[i].trim(); 
 
     researcherObj = prev[researcher]; 
 
     if (researcherObj) { 
 
      if (researcherObj[value.Year]) { 
 
       researcherObj[value.Year]++; 
 
      } else { 
 
       researcherObj[value.Year] = 1; 
 
      } 
 
     } else { 
 
      researcherObj = {}; 
 
      researcherObj[value.Year] = 1; 
 
      prev[researcher] = researcherObj; 
 
     } 
 

 
    } 
 

 
    return prev; 
 

 
}, {}); 
 

 
var count, 
 
    detail, 
 
    output = [], 
 
    published; 
 
for (var researcher in formatted) { 
 

 
    count = 0; 
 
    published = []; 
 
    if (formatted.hasOwnProperty(researcher)) { 
 
     detail = { 
 
      Researcher: researcher 
 
     }; 
 
     researchDetails = formatted[researcher]; 
 
      
 
     for (var researchDetail in researchDetails) { 
 
    
 
      if (researchDetails.hasOwnProperty(researchDetail)) { 
 
       count += researchDetails[researchDetail]; 
 
       published.push([parseInt(researchDetail, 10), researchDetails[researchDetail]]); 
 
      } 
 
     
 
     } 
 
     
 
     detail.Published = published; 
 
     detail.Total = count; 
 
     output.push(detail); 
 
    
 
    } 
 
    
 
} 
 

 
console.log(JSON.stringify(output)); 
 
alert(JSON.stringify(output));

Изменить эту логику в соответствии с вашими потребностями :)

+0

Большое спасибо. – supaplex

0

Привет, может быть, это будет началом,

function FlowChartJson(fullnames, allDataJson){ 
 

 
    var occurences = { }; 
 
    var json =[]; 
 

 
    for (var i = 0; i < fullnames.length; i++) { 
 
     if (typeof occurences[fullnames[i]] == "undefined") { 
 
      occurences[fullnames[i]] = 1; 
 
     } else { 
 
      occurences[fullnames[i]]++; 
 
     } 
 
    } 
 

 
    for(var name in occurences){ 
 
    \t var published = []; 
 
    \t for(var j =0;j< allDataJson.length;j++) { 
 
    \t \t if (allDataJson[j].Researcher == name) { 
 
    \t \t \t published.push([allDataJson[j].Year, 1]); //I'm assuming 1 is a constant here. cos I dont understand 
 
    \t \t } 
 
    \t } 
 
     json.push({ 
 
     \t "Published":published, 
 
\t \t \t "Researcher":name, 
 
      "Total":occurences[name] 
 
     }); 
 

 
    } 
 
    return json; 
 
}

+0

Извините, я не мог объяснить вопрос хорошо, теперь я редактировал. 1 не является константой, как я объяснил в редактировании. – supaplex

Смежные вопросы