【发布时间】:2017-05-18 06:13:06
【问题描述】:
我遇到了这个话题:Merge multiple array of objects and sum duplicate values javascript,它与我想做的事情非常接近。
我本质上需要同样的东西,但我需要平均值而不是总和。我认为可以解决问题的是:
var array1 = [{
price: "2",
ref: "A"
},
{
price: "20",
ref: "B"
},
{
price: "23",
ref: "C"
},
{
price: "23",
ref: "D"
}
];
var array2 = [{
price: "12",
ref: "A"
},
{
price: "5",
ref: "B"
},
{
price: "23",
ref: "E"
},
{
price: "23",
ref: "F"
}
];
var array3 = [{
name: "Blah",
fcp: "erol"
},
{
name: "Blah2",
fcp: "tpep"
}
];
var averagedArr = 2
var result = array1.concat(array2, array3).reduce(function(acc, curr) {
if (curr.ref) {
var fromMap = acc.map[curr.ref];
if (!fromMap) {
acc.map[curr.ref] = fromMap = {
price: 0,
ref: curr.ref
}
acc.result.push(fromMap);
}
fromMap.price += parseFloat(curr.price);
fromMap.price = parseFloat(fromMap.price/averagedArr);
} else {
acc.result.push(curr);
}
return acc;
}, {
map: {},
result: []
}).result;
console.log(result);
它不起作用,因为它似乎是在添加每个价格时平均每个价格,而不是在它们全部加在一起之后。例如,对于ref:B,结果为12.5(20+5 除以2),结果为7.5(20/2=10;10+5=15;15/2 = 7.5)。如果有人能帮我解决这个问题,我将不胜感激。
我会向提供我正在使用的回复的@Grundy 评论原始主题,但这是我的第一个问题,我无法发表评论。
这是小提琴。 https://jsfiddle.net/5xqbk9Lg/
提前致谢!
【问题讨论】:
-
基本上,您需要一个属性来表示值的总和,而平均值则需要保留总和并在另一个属性中建立平均值。以及您需要为每个推荐人设置一个计数器。
标签: javascript arrays object average