-2

Given a JavaScript array, how can you modify the items in an array with the forEach operator?

J. Peterson
  • 1,996
  • 1
  • 24
  • 21
  • 1
    See [is it possible to change values of the array when doing foreach in javascript?](https://stackoverflow.com/questions/12482961/is-it-possible-to-change-values-of-the-array-when-doing-foreach-in-javascript) – p.s.w.g Feb 27 '19 at 23:53

2 Answers2

1

This is a simple question, but I'm posting the answer so I don't have to figure it out from scratch again. The function called by forEach takes three parameters, the current item, the index of that item, and the array object. So, using a => style function, the solution is:

var data = [1,2,3,4];
data.forEach( (item, i, self) => self[i] = item + 10 );

gives the result:

[11,12,13,14]

The self parameter isn't strictly necessary with the arrow style function, so

data.forEach( (item,i) => data[i] = item + 10);

also works. You also get the same result using a regular function, e.g.:

data.forEach( function(item, i, self) { self[i] = item + 10; } );
J. Peterson
  • 1,996
  • 1
  • 24
  • 21
1

If you're replacing array items, a better way to do this is to use map instead:

var data = [1, 2, 3, 4];
data = data.map(item => item + 10);
frodo2975
  • 10,340
  • 3
  • 34
  • 41
  • I think this would be the better approach in most scenarios, but the question seems to be about modifying the array in place (I didn't downvote though). – Carcigenicate Feb 28 '19 at 00:03
  • I agree that map would be better, but you should provide an example. Your answer as it stands is more of a comment than an answer. – richbai90 Feb 28 '19 at 00:06
  • That is true, I'll update it to add an example. It is true that there are rare cases where you might want to modify an array in place, but I would say that generally using a map is preferred because it's easier to read. – frodo2975 Feb 28 '19 at 00:07