Почему мой установщик JavaScript не меняет свойства объекта, как ожидалось? - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть users массив (объектов) внутри объекта JavaScript.У каждого пользователя есть свойство isActive:

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);

Я ожидал, что мой установщик изменит значение isActive proprty каждого пользователя на false, поэтому я вижу, что в консоли оно уже меняется.

Что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 23 сентября 2019

Вам необходимо присвоить значение userStatus, чтобы вызвать функцию set.Я реорганизовал функцию для принятия статуса и имени пользователя, чтобы сопоставить только одного пользователя и изменить его статус.

let groups = {
  groupId: 1,
  userRights: {
    users: [{
      name: 'John',
      isActive: true
    },
    {
      name: 'Marry',
      isActive: true
    }
  ]},
  set userStatus({ userName, userStatus }) {
    this.userRights.users.forEach(function(user) {
      if(user.name === userName){
         user.isActive = userStatus;
      }
    });
  },
}

groups.userStatus = { userName: 'John', userStatus: false };
console.log(groups.userRights)
1 голос
/ 23 сентября 2019

Вы определяете сеттер, но нигде его не вызываете.

Вам нужно вызвать сеттер, который вы определили, используя groups.userStatus = value;.

И, на заметку, я переименовал сеттердо userStatusAll, поскольку я считаю, что это более конкретно.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...