loop a javascript function like in php foreach

Viewed 79

I want to execute this function below 3 times but each time with a different value:

  socket.broadcast.to(role).emit('login', {
   onlineusers: list
  });

I have 3 roles: non-mods, mods and admins. The value for list varies for each role like this: non-mods => nonmodslist, mods => modslist, admins => adminslist

I tried:

 roles = {non-mods : nonmodslist, mods : modslist, admins : adminslist}
 
 for(let {non-mods, mods, admins} of roles) {
  socket.broadcast.to(role).emit('login', {
   onlineusers: list
  });

but I really dont know what to do from there. What am I missing?

4 Answers

You can use for of loop with Object.entries and deconstruction

let roles = {'non-mods': nonmodslist, 'mods': modslist, 'admins': adminslist};

for (let [role, list] of Object.entries(roles)) {
    socket.broadcast.to(role).emit('login', {
        onlineusers: list
    });
}
for (var x = 0; x < roles.length; x++){
   socket.broadcast.to(roles[x]).emit.....
}

try it like this;

you want to set up an index (x) to iterate through roles, stopping once it reaches roles.length.... then you can access the specific role with that index

Please try below code

let roles = {'non-mods' : nonmodslist, 'mods' : modslist, 'admins' : adminslist}

for(let rolename in roles) {
  socket.broadcast.to(rolename).emit('login', {
  onlineusers: roles[rolename]
});
}

Object iteration can be performed using Object.keys(objectReference);

roles = {non-mods : nonmodslist, mods : modslist, admins : adminslist}
for(roleKey of Object.keys(roles)) {
    console.log(roles[roleKey]);
    // Perform operation using roles[roleKey]
}

Related