如何从数组groupBy 数组中从回答属性并使用下划线获得平均值?
我有嵌套的对象数组。它应按类别分组,并根据val属性(即1+2 => 3.3/类别总数)计算分析的平均值。所以,3/2 => 1.5
预期产出:{分析: 1.5 }
[
{ _id:"oq8DRjm6uA9mtoJvw",
answers:[
{
area:"Digital",
category:"Analytics",
qId:"wRHmpHHGzrYLsCEJ3",
type:"Reorganize",
userId:"M4JEJGiPZ8e9om9A",
val:1
},
{
area:"Digital",
category:"Analytics",
qId:"wRHmpHHGzrYLsCEJ3",
type:"Reorganize",
userId:"M4JEJGiPZ8e9om9A",
val:2
}
],
date:Tue Aug 16 2016 11:13:59
}]谢谢
发布于 2016-08-22 18:36:44
如果只想得到数组中第一个对象中答案的平均值,则可以获得答案数组、按类别将对象分组、迭代此结果对象中的所有键。和减值。
var answers = array[0].answers;
var types = _.groupBy(answers, 'category');
var result = _.mapObject(types, function(val, key) {
return _.reduce(val, function(memo, v) {
return memo + v.val;
}, 0) / val.length;
});
var array = [{
_id:"oq8DRjm6uA9mtoJvw",
answers: [
{
area:"Digital",
category:"Analytics",
qId:"wRHmpHHGzrYLsCEJ3",
type:"Reorganize",
userId:"M4JEJGiPZ8e9om9A",
val:1
},
{
area:"Digital",
category:"Analytics",
qId:"wRHmpHHGzrYLsCEJ3",
type:"Reorganize",
userId:"M4JEJGiPZ8e9om9A",
val:2
}],
date: 'Tue Aug 16 2016 11:13:59'
}];
var answers = array[0].answers;
var types = _.groupBy(answers, 'category');
var result = _.mapObject(types, function(val, key) {
return _.reduce(val, function(memo, v) {
return memo + v.val;
}, 0) / val.length;
});
console.log(result);<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
发布于 2016-08-21 15:39:40
如果我没听错你的问题..。最简单的解决方案是迭代数组,并为检查的每个元素填充另一个数组。
数组应该包含
{
categoryName: '',
valueSum: 0,
count: 0
}O(n^2)复杂度的算法如下:
当您迭代整个数组时,开始迭代temp数组并除以valueSum / count,这将为每个类别提供AVG。
https://stackoverflow.com/questions/39065330
复制相似问题