Js change object inside array in for each loop

后端 未结 5 1756
广开言路
广开言路 2020-12-18 19:43

I want to change the current object in for each loop and it does not work, Why it is not working and how can i do this?

var arr = [{num: 1}, {num: 2}];

arr.         


        
5条回答
  •  再見小時候
    2020-12-18 20:20

    It's not working because all you're doing is updating the value of the argument you were given (item), which doesn't have a live connection to the array. That change disappears as soon as your callback returns.

    The most appropriate way to do this is to use map:

    var arr = [{num: 1}, {num: 2}];
    
    arr = arr.map(function(item) {
      return {somethingElse: 1};
    });
    
    console.log(arr);
    

    map gives your function each item and builds a new array from whatever you return.

    If it's important that you update the array in-place instead of building a new one, you can use forEach, you just have to assign back to the array element you're updating. The second argument to forEach's callback is the index you're visiting, so:

    var arr = [{num: 1}, {num: 2}];
    
    arr.forEach(function(item, index) {
      arr[index] = {somethingElse: 1};
    });
    
    console.log(arr);
    

    Of course, in both cases above, you'd actually be using item for something, which you aren't in your example code... If you wanted to add/remove properties on item, not replace the object entirely, Cyril's answer shows you how to do that.

提交回复
热议问题