2010-03-05 42 views
0

我正在爲合同橋的一個評分腳本,只是爲了咯咯地笑。我存儲遊戲作爲一個對象:動態添加成員到一個JavaScript對象

var game = { 
    team1 : { player1 : prompt("Team 1, first player: "), player2 : prompt("Team 1, second player:") }, 
    team2 : { player1 : prompt("Team 2, first player: "), player2 : prompt("Team 2, second player:") }, 
} 

function deal(bid){ 
    console.log("The bid was " + bid); 
    game.hand = {"bid" : bid , "made" : undefined}; 
    score(); 
} 

所以我想,雖然做了什麼,比這更好的,是爲了保持遊戲的歷史中扮演本次會議。我想,在僞代碼,做這樣的事情:

game.(hand + (hand.length+1)) 

或東西喜歡這樣;基本上自動遞增對象內的某個對象。我不確定陣列會在這裏,但也許?我願意接受建議/改進我的代碼。

PS - 我寧願在javascript中執行此操作,而不是jQuery,Prototype,Dojo,MooTools ...或任何其他庫。謝謝!

編輯

對不起,讓我澄清:打3手左右之後的結果會是這樣一個對象:

var game = { 
    team1 : { player1 : prompt("Team 1, first player: "), player2 : prompt("Team 1, second player:") }, 
    team2 : { player1 : prompt("Team 2, first player: "), player2 : prompt("Team 2, second player:") }, 
    hand1 : { bid : 2 , made : 2 } , 
    hand2 : { bid : 1 , made : 4 } , 
    hand3 : { bid : 3 , made : 1 } , 
    hand4 : { bid : 2 , //and made hasn't been set yet because we're mid-hand 

} 

回答

3

鑑於你的僞代碼,你可以做到以下幾點:

game[hand + (hand.length+1)] 

ie game["prop"] == game.prop - 兩者都提供對相同屬性的訪問。

1

老問題,我明白了,但我需要做類似的事情。我會投票答覆,但我不被允許。

看起來最快的方法是訪問哈希/關聯數組等對象。在Firebug

var d = {}; 
var z = "hand"; 
d[z+1] = "foo"; 

console.log(d.hand1); 

測試了這一點。似乎工作得很好。 JS似乎沒有像表達式中的curley括號一樣的強制解析變量的php。

d->{z+1} = "foo"; // can't find anything like this in JS. 

希望幫助,

+0

不,你是對的,把它放在方括號中得到它評估,或將其保存爲「富」,然後「OBJ [富] =的方式.. 。'如果它超過幾個字符就可以使用它。 – 2011-11-30 19:13:08