我给出了使用Node JS的第一步,一切顺利,直到遇到一个既无法理解也无法找到解决方法的奇怪行为。
它应该是如此简单,所有内容都有据可查,而且我可以找到很多这样的工作示例,不幸的是,我可能缺少一些非常明显的东西。经过大约2天的放松之后,我决定寻求帮助...在此先感谢。

我正在尝试将对象(clientID,套接字信息)存储在数组中,并希望在连接丢失时删除对象。

我已经构建了代码的一小部分来复制行为。

var socket = require('socket.io');

var machines = [];
var mach1 = [new socket(), new socket()];
var mach2 = [new socket(), new socket()];
var mach3 = [new socket(), new socket()];

machines["357973049420265"] = mach1;
machines["357973049420266"] = mach2;
machines["357973049420267"] = mach3;

console.log("Before : " + Object.keys(machines));
machines.splice(0,1);
console.log("After  : " + Object.keys(machines));


结果是:

Before : 357973049420265, 357973049420266, 357973049420267
After  : 357973049420265, 357973049420266, 357973049420267


有任何想法吗?

谢谢

最佳答案

machines是一个数组,因此您要设置"357973049420265"(一个字符串值)作为键。 .splice将仅更改数字键。

我不确定您要实现的目标,但是您要么想使用machines = {}并通过delete删除属性,要么想使用.push添加数组元素以使.splice正常工作。

如果使用了对象,则可以执行delete machines[Object.keys(machines).slice(0, 1)]来执行此代码似乎试图执行的操作,但是您的最终目标尚不清楚。

08-04 00:42