【问题标题】:array in node js behaves odd节点js中的数组表现奇怪
【发布时间】:2013-01-15 17:24:04
【问题描述】:

我正在使用 node 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);
    });

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

【问题讨论】:

    标签: arrays node.js


    【解决方案1】:

    回答你的第一点:

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

    当您手动将一个值放入 101 时,它将填充其余的值,因为它必须从 0 开始运行,这些值将被填充为 undefined。 (根据 Andrew Barretts 的评论

    回答你的第二点:

    如果你需要一个“关联数组”或者至少是人们所说的关联数组,那么你应该使用对象。

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

    【讨论】:

    • 说“数组被未定义填充”可能更清楚
    • 我可以使用 obj = game['g232'] 检索它们吗??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多