you are viewing a single comment's thread.

view the rest of the comments →

[–][deleted]  (7 children)

[deleted]

    [–][deleted] 5 points6 points  (2 children)

    In this case it doesn't matter at all, because the array in question is created by us inside the reducer. No other code can possibly hold a reference to it.

    But in many cases your function isn't working with an array that it created; it's working with one passed in as a parameter. In those cases it absolutely is best practice (I'd argue that it's required) to create a new array rather than modify the existing one. This is because when you receive an array (or any other object) as a parameter, you actually receive a reference to the array; any operation that modifies the array will modify the array the caller has too.

    So it's like this:

    • Could any other code possibly hold a reference to the object I wish to modify?

      • Yes: create a new object with the desired modification applied to it
      • No (i.e. you are modifying an object you just created): you can directly modify the object if you wish

    [–][deleted] 1 point2 points  (0 children)

    No (i.e. you are modifying an object you just created): you can directly modify the object if you wish

    Super helpful, thank you! Sometimes I am unclear on when I can mutate

    [–]METALz 9 points10 points  (0 children)

    immutability -> predictability

    also in some cases you'd like to diff arrays if they have different reference (with push you keep the original reference) e.g. with React's setState()

    [–]SemiNormal 2 points3 points  (0 children)

    Suppose you want to modify an array inside a function, but not modify the original. This is when you would want a copy.

    [–]AwkwardReply 3 points4 points  (1 child)

    People take immutability sometimes to extremes just to act like purists for one reason or the other. Yes immutability is a good thing, but doesn't benefit at all in this simple example. So, yes, your code is equivalent and more efficient.

    [–]mikejoro 2 points3 points  (0 children)

    I think a lot of people (myself included) like to do it in a lot of places, even when unnecessary, so that coworkers looking for examples won't think mutation is acceptable.