节点js中的数组表现为奇数

时间:2013-01-15 08:59:48

标签: arrays node.js

我正在使用节点js来创建一个多人游戏网站。所以每次连接套接字时,我都会将这个套接字添加到像这样的数组中

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);
    });

这里总用户显示102,因为用户密钥是101并且它自动从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);
    });

如果这是这里的数组行为,我不知道如何插入和获取

1 个答案:

答案 0 :(得分:2)

回答你的第一点:

数组使用从0开始的数字索引。

当您手动将值放在101时,它将填充剩余的值,因为它必须从0运行,这些将填充未定义。 (根据Andrew Barretts评论

回答你的第二点:

如果你需要一个“关联数组”或至少人们称之为关联数组,那么你应该使用对象。

game= new Object();
game["g1"]=...
game["g25"]=...
...