我怎样才能解决id问题

时间:2016-10-30 12:41:28

标签: javascript socket.io

我有问题。我给了ID var nextId = players_online.length; 但是如果例如:玩家一连接到游戏他得到id:1,第二个玩家得到id:2,然后如果第一个玩家断开其他连接的玩家获得相同的ID:2

P.S我也做不到 var nextId = nextId + 1; 因为我用他们的id player_online [id]来吸引玩家。例如:玩家连接到游戏他得到越来越高的id player = {id},但是然后其他玩家断开连接将没有这样的id players_online [10],因为一个断开连接的阵列中没有玩家10 ...

任何想法?(不知何故,如果其他玩家没有使用它,我必须给它们id,它不能高于那些player_online.length)

1 个答案:

答案 0 :(得分:1)

您可以使用带有整数键的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。