Iteration Methods
Built-in JavaScript methods that help to iterate through an array are called iteration methods or iterators. Let's have a look at the different type of iterators:
- forEach
- map
- filter
- find
- findIndex
- every
- some
- reduce
- for...in
- for...of
1. The .forEach() method:
- .forEach() takes an argument of callback function.
- .forEach() will loop through the array and execute the callback function for each element of the array.
- During each iteration, the current element will be passed as an argument to the callback function.
- The callback function can be in function declaration format, function expression or an arrow function.
- The return value for .forEach() will be undefined.
const boxes = [{ height: 10, width: 30 },{ height: 20, width: 50 },{ height: 30, width: 60 }];let areas = [];boxes.forEach(function(box){areas.push(box.height*box.width);});console.log(areas);
output:
[ 300, 1000, 1800 ]
2. The .map() method:
- when we call .map() on an array, it takes an argument of a callback function and returns a new array.
let students = [{id: 1, name: 'Tim', course: 'Java'},{id: 2, name: 'James', course: 'JavaScript'},{id: 3, name: 'David', course: 'Python'}];//directly getting a property value from array using maplet name = students.map(function(student){return student['name'];});function pluck(array, property){let a2 = array.map(function(obj){return obj[property];});return a2;}console.log(name);//getting desired peroperty values using a functionconsole.log(pluck(students, 'id'));console.log(pluck(students, 'name'));console.log(pluck(students, 'course'));
output:
[ 'Tim', 'James', 'David' ][ 1, 2, 3 ][ 'Tim', 'James', 'David' ][ 'Java', 'JavaScript', 'Python' ]
3. The .filter() method:
- The .filter() method returns a new array after filtering out certain elements from the original array.
- The callback function for the .filter() method returns either true or false depending on the element that is passed to it.
- The elements for which the callback function returns true as value is added to the new array.
let employees = [{id: 1, name: 'James', dept: 'IT'},{id: 2, name: 'David', dept: 'Accounts'},{id: 3, name: 'Tim', dept: 'HR'},{id: 4, name: 'Vinod', dept: 'IT'}];const deptCS_Filter = employees.filter(function(employee){return employee.dept === 'IT';});console.log(deptCS_Filter);
output:
[ { id: 1, name: 'James', dept: 'IT' },{ id: 4, name: 'Vinod', dept: 'IT' } ]
4. The .find() method:
- find() method executes a callback function once for each element in the array until it finds a value that returns as true.
- find() only returns the first element matching the given search criteria.
- If nothing is found matching the given search criteria, undefined is returned.
- find() does not mutate or change the original Array.
let employees = [{id: 1, age: 35, name: 'James', dept: 'IT', education: 'Masters'},{id: 2, age: 25, name: 'David', dept: 'Accounts', education: 'High School'},{id: 3, age: 45,name: 'Tim', dept: 'HR', education: 'Graduate'},{id: 4, age: 50,name: 'Vinod', dept: 'IT', education: 'PHD'}];function chooseEmployee(arrEmployee){return arrEmployee.find(function(emp){return emp.name === 'David';});}console.log(chooseEmployee(employees));
output:
{ id: 2, age: 25, name: 'David', dept: 'Accounts', education: 'High School' }
5. The .findIndex() method:
- findIndex() returns the index of the first element in the array that satisfies the given search criteria.
- If nothing is found matching the given search criteria, -1 is returned.
let employees = [{id: 1, age: 35, name: 'James', dept: 'IT', education: 'Masters'},{id: 2, age: 25, name: 'David', dept: 'Accounts', education: 'High School'},{id: 3, age: 45,name: 'Tim', dept: 'HR', education: 'Graduate'},{id: 4, age: 50,name: 'Vinod', dept: 'IT', education: 'PHD'}];function chooseEmployee(arrEmployee){return arrEmployee.findIndex(function(emp){return emp.name === 'Tim';});}console.log(chooseEmployee(employees));
output:
2
6. The .every() method:
var students = [{ id: 1, passed: true },{ id: 2, passed: false},{ id: 3, passed: true }];const hasPassed;hasPassed = students.every(function(student){return student.passed === true;});console.log(hasPassed);
output:
false
7. The .some() method:
let students = [{ id: 1, passed: true },{ id: 2, passed: false},{ id: 3, passed: true }];let hasFailed;hasFailed = students.some(function(student){return student.passed === false;});console.log(hasFailed);
output:
true
8. The .reduce() method:
- The .reduce() method returns a single value after iterating through the elements of an array
- The .reduce() method takes a callback function as first argument. This callback function has two parameters.
- The .reduce() method can also take an optional second parameter to set an initial value for the first argument in the callback function.
let passed = [{ year: 2016 ,pass: 64 }, { year: 2017 , pass: 42 } , { year: 2018 ,pass: 52 }];const totalPassed;totalPassed = passed.reduce(function(total, student){return student.pass + total;},0);console.log(totalPassed);
output:
158
9. for...in
- for...in will execute a given block of code for each property in an object.
let dept ={finance: {'employee1': {id: 1, age: 35, name: 'James', dept: 'IT', education: 'Masters'},'employee2': {id: 2, age: 25, name: 'David', dept: 'Accounts', education: 'High School'},'employee3': {id: 3, age: 45,name: 'Tim', dept: 'HR', education: 'Graduate'},'employee4': {id: 4, age: 50,name: 'Vinod', dept: 'IT', education: 'PHD'}}};for (let employee in dept.finance) {console.log( employee + ': ' + dept.finance[employee].name);};
output:
"employee1: James""employee2: David""employee3: Tim""employee4: Vinod"
10. for...of
- The for/of statement loops through the values of iterable objects such as Arrays, Strings, Maps, NodeLists, Set, TypedArray, etc.
- It can only be used on data structures with a Symbol.iterator method implemented (can't be used on objects)
- For any data type/structure, you can use
console.dir()
to see whether a Symbol.iterator method is implemented or not. For example, for the below case, you can run commandconsole.dir(arr)
.
Note: The Console method dir() displays an interactive list of the properties of the specified JavaScript object
let arr = [1,2,3,4,5];for (let value of arr){console.log(value);}
Output:
12345