9

I have an array as such

const arr = [a={} , b={}]

Now I know the spread operator is not for mutation or pushing but it is very easy to do so with.

I want this button to add elements to a when it's pressed

 <Button
title= {this.props.title}
 onPress={ this.roomNumberPressed }
 />

so the end results be something like :

arr = [a={1,2,3} , b={3,4,5}]
Hypothesis
  • 1,208
  • 3
  • 17
  • 43
  • 2
    Note: `...` isn't, and can't be, an operator, neither when used for spread nor rest. It does things operators cannot do. [Details](https://stackoverflow.com/questions/44934828/is-foo-an-operator-or-syntax/44934830#44934830). – T.J. Crowder Sep 17 '18 at 08:22
  • 2
    `const arr = [a={} , b={}]` isn't valid syntax. Do you have an array, or an object with `a` and `b` properties? – T.J. Crowder Sep 17 '18 at 08:24
  • 2
    Perhaps you mean `{a: [], b: []}`? – OliverRadini Sep 17 '18 at 08:26

1 Answers1

17

I want this button to add elements to a when it's pressed

As you said in your question, spread notation isn't for adding to existing objects. Your options are:

  1. Use spread to create a new object and assign that new object to a:

    a = {...a, ...theNewPropertiesToAdd};
    
  2. Use Object.assign to add new properties to the existing a:

    Object.assign(a, theNewPropertiesToAdd);
    

Note I've just used a above because your const arr = [a={}, b={}] is a syntax error, and I can't tell whether you mean const arr = [{}, {}] (in which case a above is arr[0]), or const arr = {a: {}, b: {}} (in which case a above is arr.a [and arr isn't an array]).

T.J. Crowder
  • 1,031,962
  • 187
  • 1,923
  • 1,875