我正在使用节点js和套接字IO创建游戏。
我正在创建玩家
var player = new playa.playa();
player.name = info.name;
player.picture = info.picture;
player.email = info.email;
player.user_id = info.user_id;
player.socket = socket;
然后我将播放器添加到我的阵列
playerPool[info.user_id] = player;
映射,这样我就可以引用playerPool [user_Id]而无需遍历循环
我想将我的播放器添加到我的游戏中
g.addPlayer(playerPool[info.user_id]);
this.addPlayer = function(player)
{
var self = this;
if(this.max_players > this.current_players.length)
{
self.current_players[player_userid] =player;
}
}
然而,我一直收到错误
for(var key in obj) RangeError max call stack size exceeded
我的问题是
如果我打电话
player.user_id
它返回播放器类的用户ID,所以我知道它是一个有效的对象。
我从未要求JavaScript迭代对象,只需将其重新映射到游戏类中的player数组,就像我对我的播放器池一样。然而,这似乎是一个问题。有没有人遇到同样的问题?
答案 0 :(得分:1)
for循环的语法正是这样做的,它循环遍历该对象的键值
所以语法
for(var key in obj)
会给出该对象的键,即属性。为了访问对象值,您需要在此for循环中使用obj [key]。
获取您创建的数组值的另一种方法是:
playerPool.forEach(function(player) {
//Over here you get each player in the array
});