我有个问题。我用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。