Javascript:向数组动态添加数据

Javascript:向数组动态添加数据,javascript,arrays,Javascript,Arrays,我有一个有玩家的阵列。每个玩家都有自己的名字(array[i].name)和力量(array[i].power)。现在我想为每个玩家动态添加分数。每个年级都应该有自己的成绩类别 数据结构示例: array[i].football.shooting=5; array[i].football.dribbling=3; 我试着先把等级的名字推给每个玩家,然后把类别作为一个额外的数组添加进去。但是,即使是.push()也不能像我提到的那样工作: for (var i = 0; i < arra

我有一个有玩家的阵列。每个玩家都有自己的名字(
array[i].name
)和力量(
array[i].power
)。现在我想为每个玩家动态添加分数。每个年级都应该有自己的成绩类别

数据结构示例:

array[i].football.shooting=5;

array[i].football.dribbling=3;
我试着先把等级的名字推给每个玩家,然后把类别作为一个额外的数组添加进去。但是,即使是.push()也不能像我提到的那样工作:

for (var i = 0; i < array.length; i++) {
        array[i].push(gradeName);
}
for(变量i=0;i
有人能告诉我怎么解决这个问题吗

多谢各位

这是一个非常规数组

试一试

for(变量i=0;i
可能是这样的:

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

var数组=[{
姓名:'你好',
功率:1
}, {
名称:“世界”,
电源:3
}];
var getGrades=函数(){
返回{
拍摄:5,
滴水:3
};
}
对于(var i=0;i

您还应该发布所需的输出,以获得具体的答案。

在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);
}

根据您的数据结构示例,添加应如下所示:

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

所以
array
包含玩家对象?试试这个:
array[i].grade=gradeName尝试`array[i][“grade”]=gradeName。Push将值附加到数组中。您必须调用类别数组中的Push,而不是玩家数组中的Push。如何在玩家对象中保留类别数组?它不应该是数组[i].football[gradeName]=gradeValue??非常感谢。但是,我怎样才能将“航班”和“着陆”类别的名称动态设置为动态输入?如果您将来想更改属性名称,您必须更改属性内容-让我为您更新我的答案。回答editedOk,但我可以传递一个变量作为类别名称吗?飞行和着陆类别是硬编码的。例如,我如何在用户输入后命名类别?确保您可以毫无问题地使用该模式中的任何变量-我用一个额外的示例为您更新了答案。谢谢!但是,我怎样才能将“投篮”和“运球”等类别的名称动态设置为动态输入?正如我对这个解决方案的理解,我必须有静态类别,不是吗?我不知道从哪里获得数据,我只是简单地把一个静态对象作为例子。你可以做一个函数来获取gradeName。如果我在函数中得到gradeName和两个类别(射击和格斗)。我怎样才能不硬编码类别名称,而是从函数中获取它呢?我用一个简单的例子更新了答案,即使用一个函数,然后你需要添加一些条件,或者你需要什么来获得技能分数。好的,但我仍然不确定如何命名类别名称,例如,在用户输入一些内容后,射击和运球。
for(var i = 0; i < players.length; i++){
     players[i].attributes.push(newSkill);
}
var grade = 'footbal';
var category = 'shooting';
var points = 5;
array[i][grade] = array[i][grade] || {};
array[i][grade][category] = points;