Search code examples
javascriptjavascript-objects

Why does my JavaScript setter not change object property as expected?


I have users array (of objects) inside a JavaScript object. Every user has an isActive property:

let groups = {
  groupId: 0,
  userRights: {
    users: [{
      name: 'John',
      isActive: true
    },
    {
      name: 'Marry',
      isActive: true
    }
  ]},
  set userStatus(user) {
    this.userRights.users.forEach(function(user) {
      // On this condition, change users statuses
      if(parseInt(this.groupId) !== 1){
       user.isActive = false;
      }
    });
  },
}

console.log(groups.userRights.users);

I was expecting my setter to change every user's isActive proprty to false so I could see it in the console already changes.

What am doing wrong?


Solution

  • You are defining the setter, but not calling it anywhere.

    You need to call the setter you defined using groups.userStatus = value;.

    And on a side note, I renamed the setter to userStatusAll as I believe it's more specific.

    let groups = {
      groupId: 1,
      userRights: {
        users: [{
          name: 'John',
          isActive: true
        },
        {
          name: 'Marry',
          isActive: true
        }
      ]},
    
      //defining the setter
      set userStatusAll(user) {
        this.userRights.users.forEach(function(user) {
          user.isActive = false;
        });
      },
    }
    
    groups.userStatusAll = false; //calling the setter with value of false
    console.log(groups.userRights.users);