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