0

私はノードjsを使用してマルチプレイヤーゲームのWebサイトを作成しています。したがって、ソケットが接続されるたびに、そのソケットを次のような配列に追加します

var users = [];
var games = [];
var joinKey = [];
var key = 0;
var usersKey = 101;
var gamesKey = 201;

io.sockets.on('connection', function (socket) {
    socket.on('connect', function(){
        console.log('connect');
        var clientId = usersKey;
        socket.clientId = clientId;
        users[usersKey] = socket;
        usersKey++;
        socket.emit('getClientId', clientId);
        console.log(socket.clientId + ' connected');
        console.log('Total users: ' + users.length);
    });

ここでは、ユーザーキーが101であるため、合計ユーザー数は102と表示され、0から100までの空白の値が自動的に記録されます。これは通常ではないと思います。また、インデックスを使用して他の配列からソケットを取得する場合、インデックスが「g201」のように文字列であるかどうかは未定義です。

socket.on('createNewGame', function(){
        var game = [];
        var clientId = socket.clientId;
        game[clientId] = socket;
        console.log(game);
        var gameId = 'g' + gamesKey;
        gamesKey++;
        games[gameId] = game;
        console.log('Total Games: ' + games.length)
        socket.gameId = gameId;

        var publicKey = ++key;
        joinKey[publicKey] = gameId;

        socket.emit('gameCreated', publicKey);
    });

これがここでの配列の動作である場合、挿入とフェッチの方法がわかりません

4

1 に答える 1

2

あなたの最初のポイントに答えるために:

配列は、0から実行される数値インデックスを使用します。

手動で値を101に配置すると、0から実行する必要があるため、残りの値が入力されます。これらには未定義が埋め込まれます。(Andrew Barrettsのコメントによる

2番目のポイントに答えるには:

「連想配列」または少なくとも人々が連想配列と呼ぶものが必要な場合は、オブジェクトを使用する必要があります。

game= new Object();
game["g1"]=...
game["g25"]=...
...
于 2013-01-15T09:05:13.610 に答える