2016-11-23 6 views
3

を放出するためにどのように私はこのような何かを持っているサーバ側ではMapオブジェクト

socket.on('user_change', users => { 
    for (let user of users) { 
     userlist.append(`<li>${user.name}</li>`); 
    } 
}); 

しかしusersこと({})は空です。

Mapオブジェクトを発行するにはどうすればよいですか?

答えて

1

おそらくJSONをシリアル化フォーマットとして使用しているsocket.io(または何らかの転送メカニズム)です。残念ながら、マップやセットなどのES2015データ型はJSONエンコードできません。

let m = new Map([['one', 1], ['ten', 10], ['hundred', 100]]); 
console.log(JSON.stringify(m)); 
// "{}" 

それは非常に洗練さだが、私は、アレイ・オブ・アレイをサーバー側に変換し、それを送信し、クライアント上のマップを作成し直す:あなたのケースでそう

let transitString = JSON.stringify(Array.from(m)); 
console.log(transitString) 
// "[["one",1],["ten",10],["hundred",100]]" 
var newMap = new Map(JSON.parse(transitString)); 
console.log(newMap) 
// Map {"one" => 1, "ten" => 10, "hundred" => 100} 

、Iサーバー上でio.emit('user_change', Array.from(users));を実行し、クライアントでforループを変更してマップ:for (let user of (new Map(users)))を使用します。

関連する問題