大多数其他答案显示将对象数组分组而不是数组分组很热。希望对嵌套数组进行分组并找到其余项的平均值
我想按url(数组中的第二项)对数组进行分组,并找到其余项的平均值。因此,我们应该能够将所有具有相同路径的url分组,例如“ / url / ranking”,它们可以在2个子数组中找到,而/ different / url可以在3个子数组中找到。当我们根据网址对数组进行分组时,我还希望找到其余数字的平均值。
[
[
'randomstring4',
"/url/ranking/",
12.1176,
76.8978,
8.8990
],
[
'randomstring3',
"/url/ranking/",
33.76,
24.8978,
7.8990
],
[
'randomstring2',
"/different/url/",
42.1176,
26.8978,
83.8990
],
[
'randomstring1',
"/different/url/",
33.76,
24.8978,
73.8990
],
[
'randomstring1',
"/different/url/",
13.689,
4.118,
53.03
],
]
在上面的示例中,我们将按url分组,并获取例如
其余项目的平均值[ 'randomstring4', "/url/ranking/", 22.93, // (12.1176+33.76)/2 50.89, 8.39 ]
这将提供一种方法来获取来自不同网站的url得分,并根据生成的数据查找平均得分。
这是数组项之一的结果(其余部分可能需要相应地计算)
[
'randomstring4',
"/url/ranking/",
22.93, // (12.1176+33.76)/2 50.89, 8.39 ]
(76.8978+24.8978)/2),
( 8.8990+7.8990)/2
]
答案 0 :(得分:2)
您可以先对项目进行分组,方法是将其值与它们的和进行计数并计数,并使用分组的数据呈现结果数组。
var data = [['randomstring4', "/url/ranking/", 12.1176, 76.8978, 8.8990], ['randomstring3', "/url/ranking/", 33.76, 24.8978, 7.8990], ['randomstring2', "/different/url/", 42.1176, 26.8978, 83.8990], ['randomstring1', "/different/url/", 33.76, 24.8978, 73.8990], ['randomstring1', "/different/url/", 13.689, 4.118, 53.03]],
groups = data.reduce((g, array) => {
var key = array[1];
g[key] = g[key] || [];
array.slice(2).forEach((v, i) => {
g[key][i] = g[key][i] || { sum: 0, count: 0 };
g[key][i].sum += v;
g[key][i].count++;
});
return g;
}, {}),
result = Object
.entries(groups)
.map(([group, values]) => (['', group, ...values.map(({ sum, count }) => sum / count)]));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }