DEV Community

Cover image for JavaScript array methods: Mutator VS Non-mutator and the returning value

JavaScript array methods: Mutator VS Non-mutator and the returning value

Ibrahima Ndaw on January 16, 2020

Originally posted on my blog JavaScript array methods enable us to manipulate our data. However, we've to use them with care depending on how they...
Collapse
 
martintarjanyi profile image
Martin Tarjányi

I think forEach is incorrectly categorized as a mutator function, since it does not modify the array itself, it only might modify the state of the objects inside the array. Actually, most of the non-mutator functions can also modify the state of the objects, for example map and filter.

Collapse
 
ibrahima92 profile image
Ibrahima Ndaw

ForEach itself does not mutate the array. But the function passed as parameter can mutate the array. And mostly forEach is used with a function parameter therefore it's more a mutator than a non-mutator. For the others, map and filter they both return a new array and reduce return a single value. But overall they does not mutate the original array.

Collapse
 
kabirsumn profile image
kabirsumn

can you give me an example where forEach() changes the original Array completely?

Collapse
 
martintarjanyi profile image
Martin Tarjányi

You pass a function to map and filter as well, so they are also able to change the state of the object. Obviously, it's a bad practice to do so but still possible.

Thread Thread
 
fetishlace profile image
fetishlace

You have to reassign e.g. arr = arr.map(x=>x**x), since arr.map(x=>x*x) won't change arr itself, it is new array, same as .filter.

Collapse
 
fetishlace profile image
fetishlace

Nice overview. But yes, I would not say .forEach() mutates too, since it is just kind of loop function - passed function may or may not mutate array on which it runs, it could be used for some side effects, it could be used to modify totally different array/object - it is just a loop over items in array and it does not imply any kind of function / computation in that loop.