Top 5 uses of reduce method in javascript
2 min readApr 7, 2023
1. To sum numbers
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((currentSum, currentNum) => currentSum + currentNum);
/*
output sum = 15
*
/
2. Getting object by reducing an array
const fruits = ['apple', 'banana', 'orange', 'banana', 'apple'];
const fruitsMap = fruits.reduce((accumulator, fruit) => {
if(accumulator[fruit]) {
accumulator[fruit]++;
} else {
accumulator[fruit] = 1;
}
return accumulator;
}, {});
/*
output:-
fruitsMap = {
apple: 2,
banana: 2,
orange: 1
}
*/
3. Flattening an array
const nestedArray = [[1, 2, 3], [4, 4, 5]];
const flattenArray = nestedArray.reduce((acc, currentArray) => [...acc, ...currentArray])
/*
output:-
flattenArray = [1, 2, 3, 4, 4, 5]
*/
4. Running Promise in sequence
const users = [
'https://jsonplaceholder.typicode.com/users/1',
'https://jsonplaceholder.typicode.com/users/2',
];
const fetchSequentially = users.reduce((accumulator, user) => {
return accumulator.then(results => {
return fetch(url)
.then(response => response.json())
.then(data => results.concat(data));
});
}, Promise.resolve([]))
/*
output:
fetchUsersSequentially = [
{
"id": 1,
"name": "Leanne Graham",
"username": "Bret",
"email": "Sincere@april.biz",
"address": {
"street": "Kulas Light",
"suite": "Apt. 556",
"city": "Gwenborough",
"zipcode": "92998-3874",
"geo": {
"lat": "-37.3159",
"lng": "81.1496"
}
},
"phone": "1-770-736-8031 x56442",
"website": "hildegard.org",
"company": {
"name": "Romaguera-Crona",
"catchPhrase": "Multi-layered client-server neural-net",
"bs": "harness real-time e-markets"
}
},
{
"id": 2,
"name": "Ervin Howell",
"username": "Antonette",
"email": "Shanna@melissa.tv",
"address": {
"street": "Victor Plains",
"suite": "Suite 879",
"city": "Wisokyburgh",
"zipcode": "90566-7771",
"geo": {
"lat": "-43.9509",
"lng": "-34.4618"
}
},
"phone": "010-692-6593 x09125",
"website": "anastasia.net",
"company": {
"name": "Deckow-Crist",
"catchPhrase": "Proactive didactic contingency",
"bs": "synergize scalable supply-chains"
}
},
]
*/
5. Grouping elements
const people = [
{
name: "Diya",
age : 21,
gender: "female"
},
{
name: "Sanjay",
age : 22,
gender: "male"
},
{
name: "Nisha",
age : 20,
gender: "female"
}
]
const peopleByGender = people.reduce((accumulator, person) => {
if(accumulator[person.gender]) {
accumulator[person.gender].push(person)
} else {
accumulator[person.gender] = [];
}
return accumulator;
}, {})
/*
output:-
peopleByGender = {
female: [
{
name: "Diya",
age : 21,
gender: "female"
},
{
name: "Nisha",
age : 20,
gender: "female"
}
],
male: [
{
name: "Sanjay",
age : 22,
gender: "male"
}
]
}
*/