[英]How to merge objects of an array having same property and different values using typescript?
[英]Calculation on array objects having same property values
我有一个数组 -
const a = [
{
value: 1,
week: 'week1',
},
{
value: 2,
week: 'week1',
},
{
value: 3,
week: 'week16',
},
{
value: 4,
week: 'week0',
},
{
value: 5,
week: 'week16',
},
]
我想通过以下方式修改数组 -
let modified = [
{
value: 1.5,
week: 'week1',
},
{
value: 4,
week: 'week16',
},
{
value: 4,
week: 'week0',
},
]
在这个修改后的数组中,重复的星期只被放置了一次,并且该值已被特定重复对象中的总值的平均值替换。
您可以收集 object 中的值,然后通过将它们的总和除以给定周的可用值数来计算平均值:
const a = [{ value: 1, week: 'week1', }, { value: 2, week: 'week1', }, { value: 3, week: 'week16', }, { value: 4, week: 'week0', }, { value: 5, week: 'week16', }]; const result = Object.entries( a.reduce((a, {value, week}) => ({...a, [week]: [...a[week] || [], value] }), {}) ).map(([week, values]) => ({ week, value: values.reduce((a, v) => a + v, 0) / values.length })); console.log(result);
你可以像下面这样简单的方式做到这一点,
1.创建一个 map 并添加类似周的值并保持其计数 2.然后创建修改。
const a = [
{
value: 1,
week: 'week1',
},
{
value: 2,
week: 'week1',
},
{
value: 3,
week: 'week16',
},
{
value: 4,
week: 'week0',
},
{
value: 5,
week: 'week16',
},
];
const helperMap = {}
a.forEach((obj) => {
if (!!helperMap[obj.week]) {
helperMap[obj.week]['sum'] += obj.value;
helperMap[obj.week]['count'] += 1;
} else {
helperMap[obj.week] = { sum: obj.value, count: 1 };
}
});
const modified = [];
for (let week in helperMap) {
let avgValue = helperMap[week]['sum'] / helperMap[week]['count'];
modified.push({ week, value: avgValue });
}
console.log(modified)
简而言之,我们也可以使用内置函数 forms,但最好理解这个概念
const a = [ { value: 1, week: 'week1', }, { value: 2, week: 'week1', }, { value: 3, week: 'week16', }, { value: 4, week: 'week0', }, { value: 5, week: 'week16', }, ] let modified = []; a.forEach(item => { let match = modified.find(m => m.week === item.week); if (match) match.value = (match.value + item.value); else modified.push(item); }); modified.forEach(m => m.value = m.value / a.filter(a => a.week === m.week).length); console.log(modified)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.