I have an array of objects like this
const myArr = [
{
gender: 'female', items: 25, price: 250
},
{
gender: 'male', items: 28, price: 112
},
{
gender: 'unknown', items: 22, price: 82
},
{
gender: 'Unknown', items: 23, price: 7
},
{
gender: '', items: 27, price: 200
}
];
and I want to group objects by gender if the gender value is 'unknown', 'Unknown' or an empty string, and sum the other values so the result will be like this:
const myArr = [
{
gender: 'female', items: 25, price: 250
},
{
gender: 'male', items: 28, price: 112
},
{
gender: 'unknown', items: 72, price: 289
},
];
What I've tried is to check if the gender is 'unknown', 'Unknown' or an empty string and group them to 'unknown' if true, but what I'm not sure is how to sum the values of items and price. Here is the code of what I've tried:
const myNewArr = Object.values(
myArr.reduce(function (r, { gender, items, price }) {
if (gender === 'unknown' || gender === 'Unknown' || gender === '') {
gender = 'unknown';
r[items] = r[items] + items;
r[price] = r[price] + price; // here i need to sum items and price somehow
}
r[gender] = r[gender] || { gender, items, price};
r[gender].items = r[items];
r[gender].price = r[price];
return r;
}, Object.create(null))
);
What am I doing wrong? Any example would be appreciated!