从javascript对象中检索值,然后将其转换为一个对象

从javascript对象中检索值,然后将其转换为一个对象,javascript,arrays,object,Javascript,Arrays,Object,我有个问题!我正在创建一个评级应用程序,我遇到了一个我不知道如何解决的问题。该应用程序基于react native,因此我使用JavaScript。 问题是,我有多个几乎相同的对象,我想从“相同”对象的值中取出平均值,然后创建一个新对象,将平均值作为新创建对象的新值 在我的代码中,这个数组作为一个函数的参数 var arr = [ {"name":"foo","value":2}, {"name":"foo","value":5}, {"name"

我有个问题!我正在创建一个评级应用程序,我遇到了一个我不知道如何解决的问题。该应用程序基于react native,因此我使用JavaScript。 问题是,我有多个几乎相同的对象,我想从“相同”对象的值中取出平均值,然后创建一个新对象,将平均值作为新创建对象的新值

在我的代码中,这个数组作为一个函数的参数

var arr = [
        {"name":"foo","value":2},
        {"name":"foo","value":5},
        {"name":"foo","value":2},
        {"name":"bar","value":2},       
        {"name":"bar","value":1}
    ]
我想要的结果是

var newArr = [    
        {"name":"foo","value":3},
        {"name":"bar","value":1.5},  
     ]
如果有人能帮助我,我将不胜感激! 当然,这不是我的确切代码,所以其他人也可以从中获得帮助,如果您希望我的代码帮助我,如果需要,我可以发送它 如果您有任何问题,我非常乐意回答这些问题

使用迭代数组,并使用
名称
值作为键收集对象。将每个名称的
属性求和为
总计
,并递增
计数

使用将对象转换回数组。使用迭代新数组,并通过将
总计
除以
计数
得到平均值

const arr=[{“name”:“foo”,“Value”:2},{“name”:“foo”,“Value”:5},{“name”:“foo”,“Value”:2},{“name”:“bar”,“Value”:2},{“name”:“bar”,“Value”:1};
const result=Object.values(arr.reduce((r,{name,Value})=>{
如果(!r[name])r[name]={name,总计:0,计数:0};
r[名称]。总计+=值;
r[名称]。计数+=1;
返回r;
},Object.create(null)))
.map({name,total,count})=>({
名称
值:总计/计数
}));

控制台日志(结果)我想你需要这样的东西:

let arr = [
        {name: "foo", Value: 2},
        {name: "foo", Value: 5},
        {name: "foo", Value: 2},
        {name: "bar", Value: 2},
        {name: "bar", Value: 1}
    ];

let tempArr = [];
arr.map((e, i) => {
    tempArr[e.name] = tempArr[e.name] || [];
    tempArr[e.name].push(e.Value);
});

var newArr = [];
$.each(Object.keys(tempArr), (i, e) => {
    let sum = tempArr[e].reduce((pv, cv) => pv+cv, 0);
    newArr.push({name: e, value: sum/tempArr[e].length});
});
console.log(newArr);

祝你好运

arr
中有属性
,在
newArr
中有属性
,因此我假设它是
。如果您不愿意,请更换

var map = {};

for(i = 0; i < arr.length; i++)
{
  if(typeof map[arr[i].name] == ‘undefined‘)
  {
    map[arr[i].name] = {
       name: arr[i].name,
       value: arr[i].value,
       count: 1,
     };
  } else {
    map[arr[i].name].value += arr[i].value;
    map[arr[i].name].count++;
}

var newArr = [];
for(prop in map)
{
  map[prop].value /= map[prop].count;

  newArr.push({
    name: prop,
    value: map[prop].value
  });
}

delete map;
var-map={};
对于(i=0;i
如果您可以选择使用下划线.js,问题就会变得简单:

  • 按名称对arr中的对象进行分组
  • 对于每一组,计算项目的平均值,方法是将项目值减至总和,然后除以组长
  • 将每个组映射到包含名称和平均值的单个对象
var arr=[
obj={
姓名:"富",,
价值:2
},
obj={
姓名:"富",,
价值:5
},
obj={
姓名:"富",,
价值:2
},
obj={
名称:“酒吧”,
价值:2
},
obj={
名称:“酒吧”,
价值:1
}
]
//连锁经营
var结果=u.chain(arr)
//按名称对数组进行分组
.groupBy('名称')
//处理每组
.map(功能(组、名称){
//计算组中项目的平均值
var avg=(group.length>0)?\uu0.reduce(group,function(sum,item){return sum+item.Value},0)/group.length:0;
返回{
姓名:姓名,,
价值:平均
}
})
.value();
console.log(结果);

您应该从提供有效的JavaScript开始-数组不是有效的JavaScript。