2015-12-02 76 views
1

我有一个阵列,里面有玩家。每个球员都有它的名字(array[i].name)和权力(array[i].power)。现在我想为每个玩家动态添加分数。每个年级都应该有自己的分数,取得分数。Javascript:向数组动态添加数据

数据结构例子:

array[i].football.shooting=5; 

array[i].football.dribbling=3; 

我试图第一推级的名称给每个玩家,然后添加的类别作为额外阵列。但没有.push()工作,因为我提到:

for (var i = 0; i < array.length; i++) { 
     array[i].push(gradeName); 
} 

可以请别人给我一个提示如何解决这个问题?

非常感谢!

+0

所以'array'包含球员的对象? – Ramanlfc

+0

试试这个:'array [i] .grade = gradeName;' – Rayon

+0

试试'array [i] [“grade”] = gradeName。将数值附加到数组。 – Rajesh

回答

0

这是一个associative array不是你的规则排列

尝试

for (var i = 0; i < array.length; i++) { 
     array[i][ gradeName ] = {}; 
} 
1

大概是这样的:

JSFiddle

var array = [{ 
    name: 'hello', 
    power: 1 
}, { 
    name: 'world', 
    power: 3 
}]; 

var getGrades = function() { 
    return { 
     shooting: 5, 
     dribling: 3 
    }; 
} 

for (var i = 0; i < array.length; i++) { 
    array[i].football = []; 
    array[i].football.push(getGrades()); 
} 

console.log(array); 

还应该发布所需输出得到一个具体的答案。

+0

谢谢!但我怎样才能动态地将“射门”和“盘带”这些类别的名称设置为动态输入?正如我理解这个解决方案,我必须有静态类别,不是吗? – bastifix

+0

我不知道你在哪里得到这些数据,我只是简单地把一个静态对象作为例子。你可以做一个函数来获取gradeName。 –

+0

如果我获得gradeName和两个类别(射击和战斗)到功能。我如何做到这一点不硬编码的类别名称,但从功能? – bastifix

1

在JavaScript我建议用数组内的对象 - 我知道这是你已经在做什么,但看这样的一个架构:

var players = [ 
    { 
     name: "Playername1", 
     attributes: [ 
     {name: "football", skill_level: { dribbling: 1, passes: 3}}, 
     {name: "basketball", skill_level: {range_shot: 3, passes:1}} 
     ] 
    } 
] 

有了这个架构,你可以把一个全新的播放器对象到阵列。您还可以遍历属性,检查现有属性,添加缺少的属性并编辑当前属性 - >种类繁多。

,如果你想将属性添加到架构它会像:

var newSkill = { name: "flying plane", skill_level: { flight: 4, landing:0 }}; 

for(var i = 0; i < players.length; i++){ 
    players[i].attributes.push(newSkill); 
} 

希望能帮助一点。

UPDATE

比方说,你已经通过形式接收用户输入并保存到一个变量userInputName

然后你就可以simlpy添加动态命名的属性,这样的:

变种newSkill = {name:userInputName,skill_level:{flight:4,landing:0}};

for(var i = 0; i < players.length; i++){ 
    players[i].attributes.push(newSkill); 
} 
+0

谢谢!但是我怎样才能动态地将类别'flight'和'landing'的名称设置为动态输入? – bastifix

+0

如果您以后要更改属性名称,则必须更改属性内容 - 让我为您提供我的答案。 **回答编辑** –

+0

好的,但我可以传递一个变量作为类别名称?类别的飞行和着陆是硬编码的。例如,如何在某些用户输入后命名类别? – bastifix

0

根据您的数据结构,例如添加应该是这样的:

var grade = 'footbal'; 
var category = 'shooting'; 
var points = 5; 
array[i][grade] = array[i][grade] || {}; 
array[i][grade][category] = points;