首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在数组中groupBy类别数组

如何在数组中groupBy类别数组
EN

Stack Overflow用户
提问于 2016-08-21 14:31:30
回答 2查看 135关注 0票数 0

如何从数组groupBy 数组中从回答属性并使用下划线获得平均值?

我有嵌套的对象数组。它应按类别分组,并根据val属性(即1+2 => 3.3/类别总数)计算分析的平均值。所以,3/2 => 1.5

预期产出:{分析: 1.5 }

代码语言:javascript
复制
[ 
{ _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
}]

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-22 18:36:44

如果只想得到数组中第一个对象中答案的平均值,则可以获得答案数组、按类别将对象分组迭代此结果对象中的所有键。减值

代码语言:javascript
复制
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;
});

代码语言:javascript
复制
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);
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

票数 1
EN

Stack Overflow用户

发布于 2016-08-21 15:39:40

如果我没听错你的问题..。最简单的解决方案是迭代数组,并为检查的每个元素填充另一个数组。

数组应该包含

代码语言:javascript
复制
{
categoryName: '',
valueSum: 0,
count: 0
}

O(n^2)复杂度的算法如下:

  • 获取数组的下一个元素
  • 如果类别存在于临时数组中,则将当前值添加到valueSum和增量count中。
  • 如果类别不存在,则使用类别向数组添加元素,并将count设置为1

当您迭代整个数组时,开始迭代temp数组并除以valueSum / count,这将为每个类别提供AVG。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39065330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档