arrays - NodeJS - 创建空数组会导致数组中有很多空值

标签 arrays node.js socket.io

我正在使用 socket.io 创建一个 Node.js 聊天
问题是,当我看到 historyconsole.log 时,我看到一个包含大量空值的数组,最后是我的历史条目 [null,null,null ......[ { username: 'Nobody Example', message: '231', date: '03/21/2013 14:23:58' } ]]

数组中怎么会有这些null?
这是我的代码的一部分。

var history = [];

io.sockets.on('connection', function (socket) {

    socket.on('send', function (message) {
        var date = time();

        io.sockets.in(socket.room).emit('message', socket.username, message, date);

        history[socket.room].push({ username: socket.username, message: message, date: date });

        console.log(history);

    });

    socket.on('joinroom', function (room, username) {
        socket.room = room;
        socket.join(room);

        if ( typeof history[room] === 'undefined' )
            history[room] = [];

    });

});

编辑更多细节:

问题出在为每个房间创建空数组时的“joinroom”事件中。
以下是我所做的一些测试:

socket.on('joinroom', function (room, username) {
    socket.room = room;
    socket.join(room);

    console.log(typeof history[room] == 'undefined');
    history[room] = [];
    console.log(typeof history[room] == 'undefined');
    console.log(JSON.stringify(history));
});

控制台日志:

true
false
[null,null,null,null,..................,null,[]]

最佳答案

如果您有一个空数组并用一个大数字(例如您的房间 ID)对其进行索引,则该数组中该数字之前的所有槽都将填充 undefined(转换为 null 在 JSON 中)。

所以试着把历史变成一个对象:

var history = {};

关于arrays - NodeJS - 创建空数组会导致数组中有很多空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15547847/

相关文章:

javascript - 如何根据输入值数组返回对象数组的匹配结果

node.js - 生成 C :\Windows\system32\cmd. exe;C:\Program Files\Git\bin ENOENT

encryption - nodejs中的AES 256 GCM加密解密

node.js - 如何使用套接字(socket.io)在 NodeJS 中找到客户端的响应时间(延迟)?

node.js - http连接请求和socket.io连接的区别

node.js - IE8 和 9 上的 socket.io 问题

c - 仅使用指针横向打印数组(转置)

python - python数组中None之间的第一个和最后一个数字

c - 如何使用 malloc 获取 c 中指针的内存地址,然后在该地址分配 char 数组?

node.js - 如何关闭 socket.io 1.0 中的服务器?