我有问题!我正在创建一个评级应用程序,我遇到了一个我不知道如何解决的问题。该应用程序是基于原生的反应,所以我使用JavaScript。 问题是我有多个几乎相同的对象,我想从“相同”对象的值中取出平均值,并创建一个新值,平均值作为新创建对象的新值< / p>
我的代码中的这个数组作为函数的参数
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},
]
如果有人能帮助我,我会非常感激! 这当然不是我的确切代码,所以其他人也可以从中获得帮助,如果你想让我的代码帮助我,我可以发送它,如果需要的话 如果您有任何问题,我非常乐意回答这些问题
答案 0 :(得分:0)
使用Array.reduce()
迭代数组,并使用name
值作为键收集到对象。将每个名称的Value
属性汇总为total
,并增加count
。
使用Object.values()
将对象转换回数组。使用Array.map()
迭代新数组,并将value
除以total
得到平均值count
:
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 }) => {
if(!r[name]) r[name] = { name, total: 0, count: 0 };
r[name].total += Value;
r[name].count += 1;
return r;
}, Object.create(null)))
.map(({ name, total, count }) => ({
name,
value: total / count
}));
console.log(result);
答案 1 :(得分:0)
我猜你需要这样的东西:
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);
祝你好运!
答案 2 :(得分:0)
在arr
中,您拥有属性Value
,而在newArr
中您拥有属性value
,因此我将其视为value
。如果不希望,请改变。
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;
答案 3 :(得分:0)
如果您可以选择使用underscore.js,问题就变得简单了:
<script src="http://underscorejs.org/underscore-min.js"></script>
for i in range(0, len(percent)):