Node.js多维对象和动态变量名

时间:2016-04-07 08:15:50

标签: javascript node.js socket.io

我正在尝试使用node.js socket.io和不同的房间。我有连接的所有用户的昵称对象,但问题是在这个对象中我不能存储用户ID的重复值,因此我不能让同一个用户使用不同的房间。现在,我想为每个房间制作不同的对象,而不是所有用户的这个昵称对象。那我怎么能这样做:nicknames [specific_room] [user.id] =代码的其余部分..?那么,我应该为每个房间单独列出数据?或者我应该为每个单独的房间使用动态变量名称?你有什么建议吗?

  nicknames[user.id]={

        'nickname': user.name,
        'socketId': socket.id,
        'room': room,
};

结果:

    { '1':
       { nickname: 'User1',
         socketId: '/#0rb7zbg0RInwKAaMAAAC',
         room: '4444',
       }, 
      '3':
       { nickname: 'User 2',
         socketId: '/#tGZPL8IUPvUoie1CAAAD',
         room: '3333',
        } 
}

我想要完成什么:

    { 3333 {     { '1':
               { nickname: 'User1',
                 socketId: '/#0rb7zbg0RInwKAaMAAAC',

                },
              '3':
               { nickname: 'User 2',
                 socketId: '/#tGZPL8IUPvUoie1CAAAD',

                } 
        }
    }

    4444 {
    }
}

其中3333和4444是房间唯一ID。 我希望我说清楚。

1 个答案:

答案 0 :(得分:0)

我没有使用socket.io,但你可以使用普通的javascript轻松做这样的事情(可能不是最优雅的解决方案,但它工作正常):

var obj = { 
  '1': { 
    nickname: 'User1',
    socketId: '/#0rb7zbg0RInwKAaMAAAC',
    room: '4444',
   }, 
  '3': { 
    nickname: 'User 2',
    socketId: '/#tGZPL8IUPvUoie1CAAAD',
    room: '3333',
  } 
};

var obj2 =  {};


for(var i in obj) {
  obj2[obj[i].room] = {};
  obj2[obj[i].room][i] = { 
    nickname: obj[i].nickname, 
    socketId: obj[i].socketId 
  };
}

console.log(obj2);

JSFiddle