DEV Community

Cover image for Map(),Filter(),reduce() with important interview questions
Srishti Prasad
Srishti Prasad

Posted on • Edited on

Map(),Filter(),reduce() with important interview questions

Map, reduce, and filter are all array methods in JavaScript. Each one will iterate over an array and perform a transformation or computation. Each will return a new array based on the result of the function.
In this article you will learn about why and how to use map, filter, reduce.

Map

The map() method is used for creating a new array from an existing one, applying a function to each one of the elements of the first array.

syntax:

var new_array = arr.map(function callback(element, index, array) {
    // Return value for new_array
}[, thisArg])
Enter fullscreen mode Exit fullscreen mode

So, the original arr.map function takes a callback function as an argument and that callback function can have three arguments passed into it :
a. current value
b. index of the current value [optional]
c. array [optional]

Implementation of Map()

Callback function will iterate for all the values of array arr and modify the array and store the value in the new array.
Using map function we need not to initialize new array.

Lets say we have an array and we want another array having all the values double the previous one.

const arr=[1,2,3,4,5];

function double(x)
{
  return x*2;  
}
const output=arr.map(double);
console.log(arr);

Enter fullscreen mode Exit fullscreen mode

writing the same code using arrow function

const output=arr.map((x)=>{
  return x*2;  
});
console.log(arr);

Enter fullscreen mode Exit fullscreen mode

Filter

The filter() method takes each element in an array and it applies a conditional statement against it. If this conditional returns true, the element gets pushed to the output array. If the condition returns false, the element does not get pushed to the output array.
So, the original Array.filter function takes a callback function as an argument and that callback function can have three arguments passed into it :
a. current value
b. index of the current value [optional]
c. array [optional]

var new_array = arr.filter(function callback(element, index, array) {
    // Return true or false
}[, thisArg])
Enter fullscreen mode Exit fullscreen mode

Lets say we want to filter out odd numbers from array.

const arr=[1,2,3,4,5]

function isOdd(x)
{
   return x%2; 
}
const output=arr.filter(isOdd);

console.log(output);

Enter fullscreen mode Exit fullscreen mode

Another example we can take is, to find numbers in array greater than 4.

const arr=[1,2,3,4,5]
const output=arr.filter((x)=>{ 
return x>4
});
console.log(output);

Enter fullscreen mode Exit fullscreen mode

Reduce

The callback argument is a function that will be called once for every item in the array. This function takes four arguments, but often only the first two are used.

accumulator - the returned value of the previous iteration
currentValue - the current item in the array
index - the index of the current item [optional]
array - the original array on which reduce was called [optional]

The initialValue argument is optional. If provided, it will be used as the initial accumulator value in the first call to the callback function.

Syntax

arr.reduce(callback[, initialValue])
Enter fullscreen mode Exit fullscreen mode

Lets take example for finding sum of all array elements

const arr=[1,2,3,4,5];

const output=arr.reduce(function(accumulator,currentIdx){
    acc+=curr;
    return acc;
});
console.log(output);

Enter fullscreen mode Exit fullscreen mode

Lets clear our concepts by trying some important question on these array methods.

Q1. Given an array of objects users, print fullname.

const users=[
  {firstName:"john",lastName:"Biden",age:26},
  {firstName:"jimmy",lastName:"cob",age:75},
  {firstName:"sam",lastName:"lewis",age:50},
  {firstName:"Ronald",lastName:"Mathew",age:26},  
];
//List of fullname
const output=users.map((x)=>{
    return x.firstName+" "+x.lastName;
})
console.log(output);
Enter fullscreen mode Exit fullscreen mode

Q2. Given an array of objects users, print user of particular age along with their frequency.

const users=[
  {firstName:"john",lastName:"Biden",age:26},
  {firstName:"jimmy",lastName:"cob",age:75},
  {firstName:"sam",lastName:"lewis",age:50},
  {firstName:"Ronald",lastName:"Mathew",age:26},  
];
Enter fullscreen mode Exit fullscreen mode

Before proceeding forward think šŸ¤” which array method we can use here!
Analogy->Since we want to reduce our list to one object denoting all ages and find different value with count of each value hence we can use 'reduce' here.

const users=[
  {firstName:"john",lastName:"Biden",age:26},
  {firstName:"jimmy",lastName:"cob",age:75},
  {firstName:"sam",lastName:"lewis",age:50},
  {firstName:"Ronald",lastName:"Mathew",age:26},  
];
//using reduce array method
const output=users.reduce(function(acc,curr){
    if(acc[curr.age])
    //if present in array object
    {
        acc[curr.age]++;            
    }else{
    //if not present in array object
      acc[curr.age]=1;      
    }
    return acc;
},{})
console.log(output);
Enter fullscreen mode Exit fullscreen mode

Q3.Print object having marks greater than 60 and rollNumber greater than 15.

let student =[
 {name:"Smith",rollNumber:31,marks:80},
 {name:"Jenny",rollNumber:15,marks:69},
 {name:"John",rollNumber:16,marks:35},
 {name:"Tiger",rollNumber:7,marks:55}
];
const details= student.filter((x)=>x.marks>60 && x.rollNumber>15);
console.log(details); 

Enter fullscreen mode Exit fullscreen mode

Q4.Print sum of marks of all the student

let student =[
 {name:"Smith",rollNumber:31,marks:80},
 {name:"Jenny",rollNumber:15,marks:69},
 {name:"John",rollNumber:16,marks:35},
 {name:"Tiger",rollNumber:7,marks:55}
];
const details = student.reduce((acc,curr)=>{
    return acc+=curr.marks;
},0);
console.log(details);
Enter fullscreen mode Exit fullscreen mode

Chaining of array methods is one of the speciality of map(),filter(),reduce().

Q5.List of all firstName from array whose age is more than 30

const users=[
  {firstName:"john",lastName:"Biden",age:26},
  {firstName:"jimmy",lastName:"Cob",age:75},
  {firstName:"Sam",lastName:"Lewis",age:50},
  {firstName:"Ronald",lastName:"Mathew",age:26},  
];
//Chaining
const output=users.filter((x)=>x.age>30).map((x)=>x.firstName);
console.log(output);
Enter fullscreen mode Exit fullscreen mode

Q6.Print the names of students who scored more than 60

let student =[
 {name:"Smith",rollNumber:31,marks:80},
 {name:"Jenny",rollNumber:15,marks:69},
 {name:"John",rollNumber:16,marks:35},
 {name:"Tiger",rollNumber:7,marks:55}
];
const ans=student.filter((x)=> {
return x.marks>60}).map((x)=>{return x.name});
console.log(ans);

Enter fullscreen mode Exit fullscreen mode

Q7.Print total marks for students with marks greater than 60 after 20 marks have been added to those who scored less than 60

let student =[
 {name:"Smith",rollNumber:31,marks:80},
 {name:"Jenny",rollNumber:15,marks:69},
 {name:"John",rollNumber:16,marks:35},
 {name:"Tiger",rollNumber:7,marks:55}
];

const totalMarks=student.map((stu)=>{
    if(stu.marks<60){
        stu.marks+=20;
    }
    return stu;
}).filter((stu)=>stu.marks>60).reduce((acc,curr)=>acc+curr.marks,0);
console.log(totalMarks);
Enter fullscreen mode Exit fullscreen mode

I hope that this blog might be helpful to you. I have done my best to explain each array method with suitable examples covering some crucial questions to answer to ace your interview and gain a deeper understanding.
Please leave any questions in the comment box, and I'll do my best to respond.
If you find this helpful do like ā¤ļø it and follow me for more such blogs.

Top comments (2)

Collapse
 
srishtikprasad profile image
Srishti Prasad

thanks @hmohammed448 to identify this , I have corrected the same šŸ™Œ

Collapse
 
hmohammed448 profile image
Mohammed Hussain • Edited

Q5.List of all firstName from array whose age is more than 30
x.age>30
use greater than operator bcz we have to print ages more than 30