Reputation: 4626
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?
Upvotes: 0
Views: 73
Reputation: 6912
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);
Upvotes: 1
Reputation: 2675
You need to assign the value to userStatus in order to call the set function. I refactored the function to accept status and user name, to match only a single user and change it's status.
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)
Upvotes: 2