1

Quick question. Can I write it in shorter way?

Actually, I would like to have the same variable from I can take value of:

{this.state.members[activeMemberId] ? this.state.members[activeMemberId].id : null}

e.g

{this.state.members[activeMemberId] ? (<-the same).id : null}

kubwosz
  • 121
  • 1
  • 8

4 Answers4

3

You can just do:

this.state.members[activeMemberId].id || null
lux
  • 8,315
  • 7
  • 36
  • 49
2

You can use logical OR

{ this.state.members[activeMemberId].id || null }

How this works ?

   x  ||  y 
   |
   |________________ If `x` is true return `x` else return `y`

Thumb rule :- Logical OR return first true value if there's any else return the last value

Code Maniac
  • 37,143
  • 5
  • 39
  • 60
0

You can use ||

this.state.members[activeMemberId].id || null
Vikas
  • 6,868
  • 4
  • 27
  • 41
0

Be careful not to get a undefined reference exception trying to access the id property of undefined

function getMemberId(activeMemberId) {
    this.state = { members: {
      id1: { id: 1 }
    } };
    const { members: { [activeMemberId]: { id = null } = {} } = {} } = this.state;
    return id;
 }
 
 console.log(getMemberId('id1'));
 console.log(getMemberId('id2'));
 
 // Or you could chain the && operator and || operator
 function getMemberIdAlt(activeMemberId) {
    this.state = { members: {
      id1: { id: 1 }
    } };
    
    return (
      this.state
      && this.state.members
      && this.state.members[activeMemberId]
      && this.state.members[activeMemberId].id
    ) || null;
 }
 
 console.log(getMemberIdAlt('id1'));
 console.log(getMemberIdAlt('id2'));
Doug Coburn
  • 2,485
  • 27
  • 24