2016-03-13 5 views
2

Я следующий данные JSONJSON Group по количеству, выводимого значение ключа результата пара JSon

"rows": [{ 
     "createdDate": "3/11/2016", 
     "createdBy": "Bob"   
    },{ 
     "createdDate": "3/12/2016", 
     "createdBy": "Megan"    
    },{ 
     "createdDate": "3/12/2016", 
     "createdBy": "Bob"   
    },{ 
     "createdDate": "3/13/2016", 
     "createdBy": "Sam"   
    },{ 
     "createdDate": "3/11/2016", 
     "createdBy": "Bob"   
    },] 

И я хочу, выхода для построения графиков, где я могу группу любого именем свойства для подсчета, например, здесь, на «CreatedBy ':

"result": [{ 
     "key": "Bob", 
     "value": 3,   
    },{ 
     "key": "Megan", 
     "value": 1,   
    },{ 
     "key": "Sam", 
     "value": 1,   
    }, 

У меня есть JSON и вам необходимо манипулировать им в следующем формате, прежде чем привязывать к моей диаграмме. Я попробовал _groupBy от подчеркивания, но не смог получить желаемый результат.

+0

Показать, что вы пробовали (в сниппета) – Amit

ответ

4

Уменьшить количество строк для подсчета входов каждого объекта по createBy. occurences будет объектом, ключи которого являются именами (например, Bob1, Megan, ...), а значения - это количество вхождений. Затем с помощью Object.keys() в цикле через этот объект и отобразить его на результат:

var rows = [ 
    { 'createdDate': '3/11/2016', 'createdBy': 'Bob' }, 
    { 'createdDate': '3/12/2016', 'createdBy': 'Megan' }, 
    { 'createdDate': '3/12/2016', 'createdBy': 'Bob' }, 
    { 'createdDate': '3/13/2016', 'createdBy': 'Sam' }, 
    { 'createdDate': '3/11/2016', 'createdBy': 'Bob' }, 
]; 

var occurences = rows.reduce(function (r, row) { 
    r[row.createdBy] = ++r[row.createdBy] || 1; 
    return r; 
}, {}); 

var result = Object.keys(occurences).map(function (key) { 
    return { key: key, value: occurences[key] }; 
}); 

console.log(result); 
+0

Это идеальный вариант, спасибо !! – Gaurav

+0

Добро пожаловать :-) – madox2

0

раствора, только с одной петлей.

var rows = [{ createdDate: "3/11/2016", createdBy: "Bob" }, { createdDate: "3/12/2016", createdBy: "Megan" }, { createdDate: "3/12/2016", createdBy: "Bob" }, { createdDate: "3/13/2016", createdBy: "Sam" }, { createdDate: "3/11/2016", createdBy: "Bob" }], 
 
    group = function (array) { 
 
     var r = [], o = {}; 
 
     array.forEach(function (a) { 
 
      if (!o[a.createdBy]) { 
 
       o[a.createdBy] = { key: a.createdBy, value: 0 }; 
 
       r.push(o[a.createdBy]); 
 
      } 
 
      o[a.createdBy].value++; 
 
     }); 
 
     return r; 
 
    }(rows); 
 

 
document.write('<pre>' + JSON.stringify(group, 0, 4) + '</pre>');