What is the difference between .map, .every, and .forEach?

JavascriptForeachMap Function

Javascript Problem Overview


I've always wondered what the difference between them were. They all seem to do the same thing...

Javascript Solutions


Solution 1 - Javascript

The difference is in the return values.

.map() returns a new Array of objects created by taking some action on the original item.

.every() returns a boolean - true if every element in this array satisfies the provided testing function. An important difference with .every() is that the test function may not always be called for every element in the array. Once the testing function returns false for any element, no more array elements are iterated. Therefore, the testing function should usually have no side effects.

.forEach() returns nothing - It iterates the Array performing a given action for each item in the Array.

Read about these and the many other Array iteration methods at MDN.

Solution 2 - Javascript

gilly3's answer is great. I just wanted to add a bit of information about other types of "loop through elements" functions.

  • .every() (stops looping the first time the iterator returns false or something falsey)
  • .some() (stops looping the first time the iterator returns true or something truthy)
  • .filter() (creates a new array including elements where the filter function returns true and omitting the ones where it returns false)
  • .map() (creates a new array from the values returned by the iterator function)
  • .reduce() (builds up a value by repeated calling the iterator, passing in previous values; see the spec for the details; useful for summing the contents of an array and many other things)
  • .reduceRight() (like reduce, but works in descending rather than ascending order)

credit to: T.J.Crowder https://stackoverflow.com/questions/9329446/how-to-do-for-each-over-an-array-in-javascript/9329476#9329476

Solution 3 - Javascript

Another consideration to the above great answers is chaining. With forEach() you can't chain, but with map(), you can.

For example:

var arrayNumbers = [3,1,2,4,5];

arrayNumbers.map(function(i) {
    return i * 2
}).sort();

with .forEach(), you can't do the .sort(), you'll get an error.

Solution 4 - Javascript

For Ramda, the difference between R.map() and R.forEach() is:

  1. R.forEach() returns the original array whereas R.map() returns a functor
  2. R.forEach() can only operate on array but R.map() can also operate on an object (i.e. the key/value pairs of the object are treated like an array)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDavid GView Question on Stackoverflow
Solution 1 - Javascriptgilly3View Answer on Stackoverflow
Solution 2 - JavascriptraphaelgontijolopesView Answer on Stackoverflow
Solution 3 - JavascriptNadine RoseView Answer on Stackoverflow
Solution 4 - JavascriptMichael OsofskyView Answer on Stackoverflow