按对象中的类型累加值
Accumulate value by types in objects
我有一个包含对象的数组,每个对象都有不同的类型(墙类型)。
我正在尝试累积每个区域的总值以检查每面墙的总面积:
const walls = [
{
typeName: "Sandwichelement - 480mm",
area: 28.165,
},
{
typeName: "Sandwichelement - 480mm",
area: 22.165,
},
{
typeName: "Beton vægelement - 150mm",
area: 89.15,
},
{
typeName: "Beton vægelement - 150mm",
area: 165,
},
{
typeName: "Fundament - 900mm",
area: 45.2,
},
{
typeName: "Fundament - 900mm",
area: 16.5,
},
];
const result = walls.reduce((acc, val) => {
acc[val.typeName] = { totalArea: 0 };
acc[val.typeName]["totalArea"] += val.area;
//the result:
//{
//"Beton vægelement - 150mm": {totalArea: 254.15},
//"Fundament - 900mm": {totalArea: 61.7},
//"Sandwichelement - 480mm": {totalArea: 50.33}
//}
return acc;
}, {});
console.log(result);
遍历它并更新结果对象:
const result = {};
for (const {typeName, area} of walls) {
if (!result[typeName]) {
result[typeName] = {totalArea: 0};
}
result[typeName].totalArea += area;
}
console.log(result);
/*
{
"Beton vægelement - 150mm": {totalArea: 254.15},
"Fundament - 900mm": {totalArea: 61.7},
"Sandwichelement - 480mm": {totalArea: 50.33}
}
*/
const walls = [
{
typeName: "Sandwichelement - 480mm",
area: 28.165,
},
{
typeName: "Sandwichelement - 480mm",
area: 22.165,
},
{
typeName: "Beton vægelement - 150mm",
area: 89.15,
},
{
typeName: "Beton vægelement - 150mm",
area: 165,
},
{
typeName: "Fundament - 900mm",
area: 45.2,
},
{
typeName: "Fundament - 900mm",
area: 16.5,
},
];
const result = {};
for (const {typeName, area} of walls) {
if (!result[typeName]) {
result[typeName] = {totalArea: 0};
}
result[typeName].totalArea += area;
}
console.log(result);
/*
{
"Beton vægelement - 150mm": {totalArea: 254.15},
"Fundament - 900mm": {totalArea: 61.7},
"Sandwichelement - 480mm": {totalArea: 50.33}
}
*/
你只需要迭代你的墙数组。在我的例子中,我使用了一个 foreach 循环并将带有总计的对象添加到它。
const walls = [
{
typeName: "Sandwichelement - 480mm",
area: 28.165,
},
{
typeName: "Sandwichelement - 480mm",
area: 22.165,
},
{
typeName: "Beton vægelement - 150mm",
area: 89.15,
},
{
typeName: "Beton vægelement - 150mm",
area: 165,
},
{
typeName: "Fundament - 900mm",
area: 45.2,
},
{
typeName: "Fundament - 900mm",
area: 16.5,
},
];
const s = {};
walls.forEach((val) => {
if (! s[val.typeName]){
s[val.typeName] = { totalArea: 0 };
s[val.typeName]["totalArea"] += val.area; } else {
s[val.typeName]["totalArea"] += val.area;
}
});
console.log("sum", s)
我有一个包含对象的数组,每个对象都有不同的类型(墙类型)。 我正在尝试累积每个区域的总值以检查每面墙的总面积:
const walls = [
{
typeName: "Sandwichelement - 480mm",
area: 28.165,
},
{
typeName: "Sandwichelement - 480mm",
area: 22.165,
},
{
typeName: "Beton vægelement - 150mm",
area: 89.15,
},
{
typeName: "Beton vægelement - 150mm",
area: 165,
},
{
typeName: "Fundament - 900mm",
area: 45.2,
},
{
typeName: "Fundament - 900mm",
area: 16.5,
},
];
const result = walls.reduce((acc, val) => {
acc[val.typeName] = { totalArea: 0 };
acc[val.typeName]["totalArea"] += val.area;
//the result:
//{
//"Beton vægelement - 150mm": {totalArea: 254.15},
//"Fundament - 900mm": {totalArea: 61.7},
//"Sandwichelement - 480mm": {totalArea: 50.33}
//}
return acc;
}, {});
console.log(result);
遍历它并更新结果对象:
const result = {};
for (const {typeName, area} of walls) {
if (!result[typeName]) {
result[typeName] = {totalArea: 0};
}
result[typeName].totalArea += area;
}
console.log(result);
/*
{
"Beton vægelement - 150mm": {totalArea: 254.15},
"Fundament - 900mm": {totalArea: 61.7},
"Sandwichelement - 480mm": {totalArea: 50.33}
}
*/
const walls = [
{
typeName: "Sandwichelement - 480mm",
area: 28.165,
},
{
typeName: "Sandwichelement - 480mm",
area: 22.165,
},
{
typeName: "Beton vægelement - 150mm",
area: 89.15,
},
{
typeName: "Beton vægelement - 150mm",
area: 165,
},
{
typeName: "Fundament - 900mm",
area: 45.2,
},
{
typeName: "Fundament - 900mm",
area: 16.5,
},
];
const result = {};
for (const {typeName, area} of walls) {
if (!result[typeName]) {
result[typeName] = {totalArea: 0};
}
result[typeName].totalArea += area;
}
console.log(result);
/*
{
"Beton vægelement - 150mm": {totalArea: 254.15},
"Fundament - 900mm": {totalArea: 61.7},
"Sandwichelement - 480mm": {totalArea: 50.33}
}
*/
你只需要迭代你的墙数组。在我的例子中,我使用了一个 foreach 循环并将带有总计的对象添加到它。
const walls = [
{
typeName: "Sandwichelement - 480mm",
area: 28.165,
},
{
typeName: "Sandwichelement - 480mm",
area: 22.165,
},
{
typeName: "Beton vægelement - 150mm",
area: 89.15,
},
{
typeName: "Beton vægelement - 150mm",
area: 165,
},
{
typeName: "Fundament - 900mm",
area: 45.2,
},
{
typeName: "Fundament - 900mm",
area: 16.5,
},
];
const s = {};
walls.forEach((val) => {
if (! s[val.typeName]){
s[val.typeName] = { totalArea: 0 };
s[val.typeName]["totalArea"] += val.area; } else {
s[val.typeName]["totalArea"] += val.area;
}
});
console.log("sum", s)