将数组中多个对象的值求和并求平均值为一个数组



我有一个包含多个对象的数组。我想得到它们值的平均值和总和。

示例原始阵列:

[[{count: 2}],[{count: 10}]]

最终阵列:

Sum array: [{count: 12}]
Average array: [{count: 6}]

我试着用reduce。。。但如果我在数组中有多个键,它就不起作用,因为它只返回一个数字。

你知道我该怎么做吗?

for(var i = 0; i < arr.length; i++){
let average = arr[i].reduce((a, b) => a + b) / arr.length;
console.log(average)
}

您的问题不清楚,但这里有一个使用reduce()将多个键累积到新对象中的示例。它还跟踪遇到的每个关键点的总数,以防数组中的所有对象都有相同的关键点。您想要的结果数组的格式尚不清楚,但我展示了一个根据reduce()调用的结果计算平均值的示例。

const arr = [
{count1: 3, count2: 2}, 
{count1: 4, count2: 10},
{count1: 3, count3: 2}
];
const sumObj = arr.reduce((a, o) => (
Object.entries(o).forEach(([k, v]) => (
a[k] = {...a[k] ?? {sum: 0, total: 0}}
, a[k]['sum'] += v
, a[k]['total'] += 1)
), a), {});
console.log(sumObj);
const averageArr = Object.entries(sumObj).map(([k, {sum, total}]) => ({key: k, average: sum/total}));
console.log(averageArr);

在给定多个键的情况下,您可以使用map和reduce:

const exampleArray = [{swag: 3, count: 2}, {swag: 4, count: 10}];
// converting into array with only the key you want to use
const countArray = exampleArray.map((element) => element.count); // an array with just {count: value} elements in them.
// ... now reduce like normally

最新更新