как суммировать значения по одинаковым ключам объекта в таблице js
Существует таблица, вид данных :
let data = [
{'other': 21, 'shop_tech': 244, 'quota_test':453},
{'other': 24, 'shop_tech': 284, 'quota_test':573},
{'other': 51, 'shop_tech': 224, 'quota_test':233},
];
Я подготавливаю результирующую сумму снизу таблицы так, чтобы меня не заботило количество столбцов присутствующих в таблице, так скажем универсальная функция, которая формирует итоги. Как можно сгруппировать данные всех колонок по одинаковым ключам? или это невозможно в силу того, что каждая строка уникальна? У меня один только способ дал результат - это создание переменных под каждый ключ и складывать значения, но если у меня 100 столбцов - это утопия. Прошу подсобить советами.
Ответы (2 шт):
Как можно сгруппировать данные всех колонок по одинаковым ключам?
Например таким образом...
const data = [
{'other': 21, 'shop_tech': 244, 'quota_test':453},
{'other': 24, 'shop_tech': 284, 'quota_test':573},
{'other': 51, 'shop_tech': 224, 'quota_test':233},
];
console.log(res(data))
//
function res(arr) {
return arr.reduce((r, o) => {
Object.keys(o).forEach(k => {
r[k] = (r[k] ?? 0) + o[k]
})
return r
}, {})
}
Можно попробовать через reduce
let data = [
{'other': 21, 'shop_tech': 244, 'quota_test':453},
{'other': 24, 'shop_tech': 284, 'quota_test':573},
{'other': 51, 'shop_tech': 224, 'quota_test':233},
];
const keys = {};
for (let key in data[0]) {
keys[key] = 0;
}
const result = data.reduce((acc, item) => {
for (let key in item) {
acc[key] += item[key];
}
return acc;
}, { ...keys });
console.log(result, keys)
Можно обойтись одной переменной, т.к. reduce мутирует объект, переданный как аккумулятор для начального значения
let data = [
{'other': 21, 'shop_tech': 244, 'quota_test':453},
{'other': 24, 'shop_tech': 284, 'quota_test':573},
{'other': 51, 'shop_tech': 224, 'quota_test':233},
];
const result = {};
for (let key in data[0]) {
result[key] = 0;
}
data.reduce((acc, item) => {
for (let key in item) {
acc[key] += item[key];
}
return acc;
}, result);
console.log(result)