繁体   English   中英

Angular - 如何使用 sum 和 group by

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM