2016-06-29 9 views
3

У меня есть данные следующие данные:Получить среднее из нескольких объектов JSON значений

var v = { 
    "2015-09-23":[ 
    {"AllConversions":"0.1","AverageCpc":"0.01","AverageCpm":"0.02","AveragePosition":"8.3",Id:1}, 
    {"AllConversions":"0.0","AverageCpc":"0.00","AverageCpm":"0.00","AveragePosition":"9.0",Id:1} 
    ], 
    "2015-09-18":[ 
    {"AllConversions":"0.1","AverageCpc":"77.14","AverageCpm":"239.57","AveragePosition":"7.7",Id:1}, 
    {"AllConversions":"0.0","AverageCpc":"39.97","AverageCpm":"703.91","AveragePosition":"3.8",Id:1}, 
    {"AllConversions":"0.0","AverageCpc":"20.40","AverageCpm":"381.36","AveragePosition":"4.3",Id:1} 
    ] 
}; 

var columns = [ 
    "AllConversions", 
    "AverageCpc", 
    "AverageCpm", 
    "AveragePosition" 
]; 

И я хочу вернуть следующий объект, который является суммой всех полей без Id:

{ 
    "2015-09-23": [ 
     {"AllConversions":"0.1","AverageCpc":"0.01","AverageCpm":"0.02","AveragePosition":"17.3",Id:1} 
    ], 
    "2015-09-18": [ 
     {"AllConversions":"0.1","AverageCpc":"137.51","AverageCpm":"1324.84","AveragePosition":"15.8",Id:1} 
    ] 
} 

Я попробовал этот код, использующий underscrore:

_.each(columns,function(item){ 
    var out = _(groups).map(function (g, key) { 
     return { 
      Date: key, 
       item: _(g).reduce(function (m, x) { return m + x.item; }, 0) 
     } 
    }); 
}); 

Но я получаю ошибку «NAN» при выполнении кода.

+0

Отформатируйте ваш код правильно –

+0

я бы просуммировать все объекты на стороне сервера и вернуть его в формате JSON. Если у вас есть доступ к серверной стороне. –

+0

Просто перебирайте значения массива Json! и сохраните их в массиве и найдите среднюю серверную часть – Jois

ответ

1

Проверьте это ..

<html> 
<head> 
    <script> 
     var v={ 

     "2015-09-23":[ 
      {"AllConversions":"0.1","AverageCpc":"0.01","AverageCpm":"0.02","AveragePosition":"8.3",Id:1},  
      {"AllConversions":"0.0","AverageCpc":"0.00","AverageCpm":"0.00","AveragePosition":"9.0",Id:1} 
     ], 

     "2015-09-18":[ 
      {"AllConversions":"0.1","AverageCpc":"77.14","AverageCpm":"239.57","AveragePosition":"7.7",Id:1}, 
      {"AllConversions":"0.0","AverageCpc":"39.97","AverageCpm":"703.91","AveragePosition":"3.8",Id:1}, 

      {"AllConversions":"0.0","AverageCpc":"20.40","AverageCpm":"381.36","AveragePosition":"4.3",Id:1} 

     ]}; 


     var columns=[ 
     "AllConversions","AverageCpc","AverageCpm","AveragePosition" 
     ]; 

    var output = {}; 
    var smallOutput = {}; 
    var tempDate = []; 
     for(var i in v){ 
      var temp = 0; 
      for(var j = 0; j < columns.length ; j++){ 
       for(var k = 0 ; k < v[i].length; k++) temp += parseFloat(v[i][k][columns[j]]); 

       smallOutput[columns[j]] = temp ; 
       temp=0; 

      } 
      output[[i]] = smallOutput; 
     } 

     console.log(output); 


</script> 
</head> 
<body> 
</body> 
</html> 

Вот скрипка .. https://jsfiddle.net/4t1teyk0/

Проверьте вашу консоль.

Вот выход

enter image description here

+1

Я тестировал его, и он хорошо работает ... –

+1

спасибо - Tirthraj Barot –

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