使用循环计数器如何动态创建对象并使用计数器命名对象?

时间:2016-07-29 22:06:09

标签: javascript

我正在尝试使用循环计数器动态创建对象。 并希望在命名对象时使用计数器本身。最终的结果将是像这样的一系列球员:

players = [
    p1: {
        //some data like age, score etc.
    },
    p2: {
        //some data like age, score etc.
    },
    p3: {
        //some data like age, score etc.
    }
]

但下面的简单代码无效。

var numPlayers = 3;
var p;

var player = {
    rollDice : function(){
        console.log('i am rolling the dice');
        },
    age: function(){
        console.log("My name is " + this.age);
       },
    score:0
  }

for(i=0;i<numPlayers;i++){
    var p + i = Object.create(player);
    console.log('player ' + p + i + " created!");
    }

问题在于这一行:

var p + i = Object.create(player);

我尝试了各种方法让它像

一样运作
var 'p' + i = Object.create(player);

如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

var players = {}

for(var i=0; i<numPlayers; i++){
  players['p' + i] = Object.create(player);
  console.log('player ' + ('p' + i) + " created!");
}

// var p; <-- not necessary

现在你有一个关联的玩家阵列。如果您这样做,您将看到此列表中的所有键:

Object.keys(players)

答案 1 :(得分:0)

编辑:似乎我不是唯一一个想到字典的人,抱歉复制 参考文献: Append values to javascript dictionary

How to create dictionary and add key value pairs dynamically in Javascript

我建议使用字典,因为你可以根据字符串(比如&#39; p1&#39;)而不是仅使用int的索引(如0) 另外,我不熟悉&#34; Object.create()&#34;但是当玩家已经成为对象时,我认为没有必要。

这就是我所拥有的:

<!DOCTYPE html>
<html>

<head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <style>
    </style>
    <title>Something</title>
</head>
<body>

</body>

<script>

new player={}

var numPlayers = 3;
var oneplayer={
    rollDice : function(){
        console.log('i am rolling the dice');
        },
    age: function(){
        console.log("My name is " + this.age);
       },
    score:0
}
var count =1



function dictionary(numPlayers){
    tempkey='p'+count
    player.push({key: , value: oneplayer})
    count=count+1
}

</script>
</html>