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 }
]
预期输出:
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);
我需要根据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 }
]
预期输出:
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);