4 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超13個(gè)贊
let array = [
["House1", 1.0, 2.0, 5.0, 1.0],
["House1", 1.0, 4.0, 2.0, 3.0],
["House2", 2.0, 3.0, 3.0, 4.0],
["House2", 5.0, 4.0, 3.0, 4.0],
["House2", 4.0, 5.0, 2.0, 2.0],
["House3", 2.0, 1.0, 4.0, 5.0]];
let averageArrays = arrays =>
arrays.reduce((sum, a) => {
a.forEach((v, i) => sum[i] = (sum[i] || 0) + v / arrays.length);
return sum;
}, []);
let grouped = array.reduce((acc, a) => {
acc[a[0]] = acc[a[0]] || [];
acc[a[0]].push(a.slice(1));
return acc;
}, {});
let averages = Object.entries(grouped).map(([name, arrays]) => [name, ...averageArrays(arrays)]);
console.log(averages);

TA貢獻(xiàn)1869條經(jīng)驗(yàn) 獲得超4個(gè)贊
以下代碼在GAS環(huán)境中進(jìn)行了測(cè)試。
function myFunction() {
var array = [
["House1", 1.0, 2.0, 5.0, 1.0],
["House1", 1.0, 4.0, 2.0, 3.0],
["House2", 2.0, 3.0, 3.0, 4.0],
["House2", 5.0, 4.0, 3.0, 4.0],
["House2", 4.0, 5.0, 2.0, 2.0],
["House3", 2.0, 1.0, 4.0, 5.0]
];
var avg = {}, count = {};
array.forEach(function(a) {
var key = a.shift();
if (avg[key]) {
for (var i = 0; i < 4; i++) {
avg[key][i] += a[i];
}
count[key]++;
} else {
avg[key] = a;
count[key] = 1;
}
});
var result = [];
for (var key in avg) {
for (var i = 0; i < 4; i++) {
avg[key][i] /= count[key];
}
avg[key].unshift(key);
result.push(avg[key]);
}
Logger.log(result);
}
可能是,它很長(zhǎng),但每一步都很清楚。我們?cè)赼vg和count對(duì)象中累積中間結(jié)果,根據(jù)需要將其轉(zhuǎn)換為結(jié)果數(shù)組。
添加回答
舉報(bào)