My Array (can have several items, and there can be multiple ‘keys’ other than ‘companyName’):
JavaScript
x
10
10
1
myarray = [
2
{ companyName: 'X', randomKey: 10, randomKey2: 90, },
3
{ companyName: 'X', randomKey: 30, randomKey2: 81, },
4
{ companyName: 'X', randomKey: 930, randomKey2: 93, },
5
{ companyName: 'X', randomKey: 20, randomKey2: 23, },
6
{ companyName: 'X', randomKey: 10, randomKey2: 10, },
7
{ companyName: 'X', randomKey: 11, randomKey2: 40, },
8
.
9
]
10
randomKey and randomKey2 are only examples. The key names can be anything and there can be 1 or more in each array item.
Expected results:
JavaScript
1
4
1
[
2
{ companyName: 'X', randomKey: 1011, randomKey2: 337, },
3
]
4
companyName: ‘X’ is a fixed value, and all of the items have this
Attempted:
JavaScript
1
11
11
1
this.myarray.reduce((acc, curr) => {
2
let ind = b.findIndex(e => e.companyName === curr.companyName);
3
if (ind > -1) {
4
acc[ind][c] = +acc[ind][c] + +a[c]
5
} else {
6
a[c] = +a[c] || 0
7
acc.push(curr)
8
}
9
return b;
10
}, []);
11
But it leads to [{x: NaN}].
How can I fix this?
Advertisement
Answer
You can play around with this example
JavaScript
1
34
34
1
const myArray = [
2
{ companyName: 'X', randomKey: 10, randomKey2: 90 },
3
{ companyName: 'X', randomKey: 30, randomKey2: 81 },
4
{ companyName: 'X', randomKey: 930, randomKey2: 93 },
5
{ companyName: 'X', randomKey: 20, randomKey2: 23 },
6
{ companyName: 'X', randomKey: 10, randomKey2: 10 },
7
{ companyName: 'X', randomKey: 11, randomKey2: 40 },
8
{ companyName: 'Y', randomKey: 11, randomKey2: 45, randomKey3: 4 },
9
{ companyName: 'Y', randomKey: 21, randomKey2: 46 },
10
];
11
12
const results = {};
13
14
const addKeyValue = (target, data) => {
15
const keys = [new Set([Object.keys(target), Object.keys(data)])];
16
17
keys.forEach((key) => {
18
target[key] = target[key] || 0;
19
target[key] += data[key] || 0;
20
});
21
22
return target;
23
};
24
25
myArray.forEach(({ companyName, data }) => {
26
if (results[companyName] === undefined) {
27
results[companyName] = { data };
28
} else {
29
results[companyName] = addKeyValue(results[companyName], data);
30
}
31
});
32
33
console.log(results);
34