我有个问题。我用var nextId = players_online.length;但是,例如:如果一个玩家连接到游戏,他的ID为:1,第二个玩家获得的ID:2,那么如果第一个玩家断开连接,其他连接的玩家得到的ID为:2

PS也我不能做var nextId = nextId + 1;因为我按照ID来标记玩家们player_online [id]。例如:玩家连接到游戏时,他的id玩家= {id}越来越高,但是其他玩家断开连接后就不会再有这样的id player_online [10],因为一个断开连接的玩家就没有数组10了...

有什么想法吗?(如果不被其他玩家使用,我必须以某种方式给他们提供id,也不能高于players_online.length)

最佳答案

您可以将JS对象与整数键而不是数组一起使用。

并生成nextId作为最大密钥+ 1。



var connections = {
    "1": { /* connection details */ },
    "2": { /* connection details */ },
    "4": { /* connection details */ }
};

// get all keys
var keys = Object.keys(connections);
console.log(keys);

// check for key existence
console.log("2" in connections);
console.log("3" in connections);

// delete connection 4
delete connections["4"];
console.log(Object.keys(connections));

function getNextId(obj) {
    var keys = Object.keys(obj).map(function(key) {
        return Number(key)
    });
    var maxKey = Math.max.apply(null, keys);
    return maxKey + 1;
}

// get next id
var nextId = getNextId(connections);
console.log(nextId);

// add new connection
connections[nextId] = { /* connection details */ };
console.log(Object.keys(connections));





或者,您可以将Guid用作ID:
https://www.npmjs.com/package/guid

然后只需为新连接生成新的guid。

10-06 08:59