簡體   English   中英

如何在 js 中遍歷這個對象?

[英]How can I iterate through this object in js?

我試圖通過rooms[room] 的對象並將屬性side = 1 的所有名稱保存到一個數組,並將side = 2 的名稱保存到另一個數組。

如:

side1['tom','bob'];
side2['billy','joe'];

這就是我到目前為止所擁有的,它得到了雙方,但我如何獲得名字呢?

var room = '1';
var rooms = {};
rooms[room] = {};

var player = 'tom'
rooms[room][player] = {};
rooms[room][player]['side'] = 1;
var player = 'billy'
rooms[room][player] = {};
rooms[room][player]['side'] = 2;
var player = 'joe'
rooms[room][player] = {};
rooms[room][player]['side'] = 2;
var player = 'bob'
rooms[room][player] = {};
rooms[room][player]['side'] = 1;

for (var key in rooms[room]) {
   if (rooms[room].hasOwnProperty(key)) {
      var obj = rooms[room][key];
      for (var prop in obj) {
         if (obj.hasOwnProperty(prop)) {
            console.log(prop + " = " + obj[prop]);
         }
      }
   }
}

在您擁有的代碼中,玩家名稱在迭代期間存儲在變量key中。 嘗試:

// ...
if (obj.hasOwnProperty(prop)) {
    console.log(prop + " = " + obj[prop]);
    console.log(key); // <- you get the names
}

但是恕我直言,當您想要擁有更多玩家時,您的代碼很快就會變得非常混亂。 我建議使用一個函數來負責創建玩家並將它們添加到您要在此過程中創建的數組中。 這樣,你就不必遍歷房建設所提到的陣列side1side2

我會建議這樣的事情:

var rooms = {};

function newPlayer(roomID, player, side) {
  if ( !rooms.hasOwnProperty(roomID) ) {
    rooms[roomID] = {};
  }
  rooms[roomID][player] = {};
  rooms[roomID][player].side = side;

  if ( !rooms[roomID].hasOwnProperty('side' + side) ) {
    rooms[roomID]['side' + side] = [];
  }
  rooms[roomID]['side' + side].push(player);
}

newPlayer(1, 'tom', 1);
newPlayer(1, 'billy', 2);
newPlayer(1, 'joe', 2);
newPlayer(1, 'bob', 1);

console.log(rooms);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM