2016-04-07 14 views
0

node.js socket.ioと異なる部屋を試しています。私は接続されているすべてのユーザーとニックネームのオブジェクトを持っていますが、問題はこのオブジェクトにあります。ユーザーIDに重複する値を格納できないため、同じユーザーに異なる部屋を使用させることはできません。さて、私はすべてのユーザーのニックネームオブジェクトの代わりに、各部屋ごとに異なるオブジェクトを作成したいと思います。だから私はこれのような何かをすることができます:ニックネーム[specific_room] [user.id] =残りのコード..?だから、私は各部屋ごとに別々のデータリストを用意する必要がありますか?または、別々の部屋ごとに動的変数名を使用する必要がありますか?何をお勧めしますか?Node.js多次元オブジェクトと動的変数名

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と4444は部屋のユニークなIDがある

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

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

       } 
     } 
    } 

    4444 { 
    } 
} 

。 私はそれを明確にしたいと思う。

+0

何かがあります'socket.join(room_id_here)'や 'socket.leave(room_id_here)'のようなものです。参加すると、指定されたルームIDにユーザーが追加され、そのユーザーからそのユーザーを削除します。 NodeJSとsocket.ioも試しています:) – Jer

答えて

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