Reputation: 115
I want to get the output like '{ sitting: 3, standing: 2 }' from the below code, can one can help ?
var desks = [
{ type: 'sitting' },
{ type: 'standing' },
{ type: 'sitting' },
{ type: 'sitting' },
{ type: 'standing' }
];
var deskTypes = desks.reduce(function() {
//Acutal code.
}, { sitting: 0, standing: 0 });
Upvotes: 0
Views: 253
Reputation: 16
const desks = [
{ type: "sitting" },
{ type: "standing" },
{ type: "sitting" },
{ type: "sitting" },
{ type: "standing" },
];
const deskTypes = desks.reduce(
(acc, item) => {
if (item.type === "sitting") {
acc.sitting++;
} else {
acc.standing++;
}
return acc;
},
{ sitting: 0, standing: 0 }
);
console.log(deskTypes);
Upvotes: 0
Reputation: 328
let deskTypes = desks.reduce(
(types, { type }) => {
types[type]++;
return types;
},
{ sitting: 0, standing: 0 }
);
Upvotes: 0
Reputation: 10193
It's simply done using Array.reduce
.
const desks = [
{ type: 'sitting' },
{ type: 'standing' },
{ type: 'sitting' },
{ type: 'sitting' },
{ type: 'standing' }
];
const result = desks.reduce((acc, cur) => {
if (acc[cur.type]) {
acc[cur.type] ++;
} else {
acc[cur.type] = 1;
}
return acc;
}, {});
console.log(result);
Upvotes: 1
Reputation: 5926
You can do it like this. Make sure to return the types
accumulator object after each iteration.
const desks = [
{ type: 'sitting' },
{ type: 'standing' },
{ type: 'sitting' },
{ type: 'sitting' },
{ type: 'standing' },
]
const deskTypes = desks.reduce((types, desk) => {
types[desk.type]++
return types
}, { sitting: 0, standing: 0 })
console.log(deskTypes)
Upvotes: 2