【问题标题】:Dynamically adding members to a javascript object将成员动态添加到 javascript 对象
【发布时间】:2010-03-05 06:22:20
【问题描述】:

我正在为合同桥牌编写评分脚本,只是为了搞笑。我将游戏存储为对象:

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

}

【问题讨论】:

    标签: javascript object


    【解决方案1】:

    根据您的伪代码,您可以执行以下操作:

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

    game["prop"] == game.prop - 两者都提供对同一属性的访问权限。

    【讨论】:

      【解决方案2】:

      老问题,我明白了,但我需要做类似的事情。我会投票赞成答案,但我不允许。

      似乎最快的方法是像哈希/关联数组一样访问对象。

      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.
      

      希望对你有帮助,

      【讨论】:

      • 不,你是对的,把它放在方括号中是评估它的方法,或者将它保存为 'foo',然后 'obj[foo] = ...' 如果使用它它不仅仅是几个字符。
      猜你喜欢
      • 2011-01-05
      • 1970-01-01
      • 1970-01-01
      • 2015-01-27
      • 1970-01-01
      • 2011-04-25
      • 2019-09-25
      • 1970-01-01
      • 2010-12-17
      相关资源
      最近更新 更多