2010-03-05 3 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 ... или в любой другой библиотеке. Благодаря!

EDIT

К сожалению, позвольте мне уточнить: Результат после игры 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

Старый вопрос, я вижу, но мне нужно сделать что-то подобное. Я проголосую за ответ, но мне не разрешают.

Похоже, что самый быстрый способ сделать это - получить доступ к объекту как хэш-ассоциативный массив.

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

console.log(d.hand1); 

Проверьте это в firebug. Кажется, работает очень хорошо. JS, похоже, не имеет эквивалента php для силового разрешения переменных, как в фигурных скобках вокруг выражения. не

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

Надежда, что помогает,

+0

Нет, ты прав, поставив его в квадратные скобки так, чтобы получить его оценивали, или сохранить его как «Foo», то «OBJ [Foo] = .. . ', чтобы использовать его, если это несколько символов. –

Смежные вопросы