gpt4 book ai didi

javascript - 合并多个对象数组并平均重复值javascript

转载 作者:行者123 更新时间:2023-12-03 04:18:35 27 4
gpt4 key购买 nike

我遇到了这个主题: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 评论了原始主题,@Grundy 提供了我正在使用的回复,但这是我的第一个问题,我无法发表评论。

这是 fiddle 。 https://jsfiddle.net/5xqbk9Lg/

提前致谢!

最佳答案

您可以收集哈希表中的所有值,并在创建新的哈希条目时为结果创建一个数据集。稍后收集价格并计算并构建实际引用的平均值。

var array1 = [{ price: "2", ref: "A" }, { price: "20", ref: "B" }, { price: "23", ref: "C" }, { price: "23", ref: "D" }],
array2 = [{ price: "12", ref: "A" }, { price: "5", ref: "B" }, { price: "23", ref: "E" }, { price: "23", ref: "F" }],
array3 = [{ name: "Blah", fcp: "erol" }, { name: "Blah2", fcp: "tpep" }],
hash = Object.create(null),
result = [];

[array1, array2, array3].forEach(function (a) {
a.forEach(function (b) {
if ('ref' in b) {
if (!hash[b.ref]) {
hash[b.ref] = { result: { ref: b.ref, avg: 0 }, sum: 0, count: 0 };
result.push(hash[b.ref].result);
}
hash[b.ref].sum += +b.price,
hash[b.ref].count++;
hash[b.ref].result.avg = hash[b.ref].sum / hash[b.ref].count;
}
});
});

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 合并多个对象数组并平均重复值javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44039892/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com