[英]Angular - How to use sum and group by
我需要根据 ID 对记录进行分组并显示重量总和。 有人可以通过 Angular 中的方法让我知道总和和分组吗?
API 回复:
data = [
{Id:1, name: 'ABC', weight: 10 },
{Id:1, name: 'ABC', weight: 14 },
{Id:1, name: 'ABC', weight: 16 },
{Id:2, name: 'DEF', weight: 23 },
{Id:2, name: 'DEF', weight: 22 },
{Id:4, name: 'GHI', weight: 44 },
{Id:4, name: 'GHI', weight: 41 }
]
预计 output:
dataResult = [
{Id:1, name: 'ABC', weight: 40 },
{Id:2, name: 'DEF', weight: 45 },
{Id:4, name: 'GHI', weight: 85 }
]
您可以使用Array.reduce()
迭代和Array.find()
按 id 查找项目。 然后你可以计算总和如下:
const data = [ {Id:1, name: 'ABC', weight: 10 }, {Id:1, name: 'ABC', weight: 14 }, {Id:1, name: 'ABC', weight: 16 }, {Id:2, name: 'DEF', weight: 23 }, {Id:2, name: 'DEF', weight: 22 }, {Id:4, name: 'GHI', weight: 44 }, {Id:4, name: 'GHI', weight: 41 } ] const calculated = data.reduce((acc, item) => { let accItem = acc.find(ai => ai.Id === item.Id) if(accItem){ accItem.weight += item.weight }else{ acc.push(item) } return acc; },[]) console.log(calculated)
我写的是JavaScript,你可以很方便的转换成TypeScript。
data = [
{Id:1, name: 'ABC', weight: 10 },
{Id:1, name: 'ABC', weight: 14 },
{Id:1, name: 'ABC', weight: 16 },
{Id:2, name: 'DEF', weight: 23 },
{Id:2, name: 'DEF', weight: 22 },
{Id:4, name: 'GHI', weight: 44 },
{Id:4, name: 'GHI', weight: 41 }
]
function entryIdAlreadyExists(dataEntries, entry) {
for (let dataEntry of dataEntries) {
if (entry.Id === dataEntry.Id) {
return true;
}
}
return false;
}
function updateWeightForEntryWithId (dataEntries, entry) {
for (let dataEntry of dataEntries) {
if (entry.Id === dataEntry.Id) {
dataEntry.weight = dataEntry.weight + entry.weight;
}
}
return dataEntries;
}
let result = [];
for (let entry of data) {
if (entryIdAlreadyExists(result, entry)) {
result = updateWeightForEntryWithId (result, entry);
} else {
result.push(entry);
}
}
console.log(result);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.