I have an array containing objects for each object has a different type (wall type). I am trying to accumulate the total value for each area in order to check the total area for each wall:
JavaScript
x
43
43
1
const walls = [
2
{
3
typeName: "Sandwichelement - 480mm",
4
area: 28.165,
5
},
6
{
7
typeName: "Sandwichelement - 480mm",
8
area: 22.165,
9
},
10
{
11
typeName: "Beton vægelement - 150mm",
12
area: 89.15,
13
},
14
{
15
typeName: "Beton vægelement - 150mm",
16
area: 165,
17
},
18
{
19
typeName: "Fundament - 900mm",
20
area: 45.2,
21
},
22
{
23
typeName: "Fundament - 900mm",
24
area: 16.5,
25
},
26
];
27
28
const result = walls.reduce((acc, val) => {
29
acc[val.typeName] = { totalArea: 0 };
30
31
acc[val.typeName]["totalArea"] += val.area;
32
33
//the result:
34
//{
35
//"Beton vægelement - 150mm": {totalArea: 254.15},
36
//"Fundament - 900mm": {totalArea: 61.7},
37
//"Sandwichelement - 480mm": {totalArea: 50.33}
38
//}
39
40
return acc;
41
}, {});
42
43
console.log(result);
Advertisement
Answer
Iterate through it and update a result object:
JavaScript
1
19
19
1
const result = {};
2
3
for (const {typeName, area} of walls) {
4
if (!result[typeName]) {
5
result[typeName] = {totalArea: 0};
6
}
7
8
result[typeName].totalArea += area;
9
}
10
11
console.log(result);
12
/*
13
{
14
"Beton vægelement - 150mm": {totalArea: 254.15},
15
"Fundament - 900mm": {totalArea: 61.7},
16
"Sandwichelement - 480mm": {totalArea: 50.33}
17
}
18
*/
19
JavaScript
1
45
45
1
const walls = [
2
{
3
typeName: "Sandwichelement - 480mm",
4
area: 28.165,
5
},
6
{
7
typeName: "Sandwichelement - 480mm",
8
area: 22.165,
9
},
10
{
11
typeName: "Beton vægelement - 150mm",
12
area: 89.15,
13
},
14
{
15
typeName: "Beton vægelement - 150mm",
16
area: 165,
17
},
18
{
19
typeName: "Fundament - 900mm",
20
area: 45.2,
21
},
22
{
23
typeName: "Fundament - 900mm",
24
area: 16.5,
25
},
26
];
27
28
const result = {};
29
30
for (const {typeName, area} of walls) {
31
if (!result[typeName]) {
32
result[typeName] = {totalArea: 0};
33
}
34
35
result[typeName].totalArea += area;
36
}
37
38
console.log(result);
39
/*
40
{
41
"Beton vægelement - 150mm": {totalArea: 254.15},
42
"Fundament - 900mm": {totalArea: 61.7},
43
"Sandwichelement - 480mm": {totalArea: 50.33}
44
}
45
*/