Javascript:动态添加数据到数组

时间:2015-12-02 08:04:29

标签: javascript arrays

我有一个有玩家的阵列。每个玩家都有自己的名字(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);
}

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

非常感谢!

4 个答案:

答案 0 :(得分: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);

您还应该发布所需的输出以获得特定答案。

答案 1 :(得分:1)

在JavaScript中,我建议使用数组中的对象 - 我知道你正在做的事情,但看看这样的架构:

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

使用该架构,您可以将整个新玩家对象推送到阵列。您还可以遍历属性,检查现有属性,添加缺失属性并编辑当前属性 - &gt;种类繁多。

如果你想在该架构中添加一个属性,那就像:

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

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

希望这会有所帮助。

<强>更新

假设您已通过表单收到用户输入并将其保存到变量userInputName

然后你可以简单地添加一个动态命名的属性:

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

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

答案 2 :(得分:0)

这是associative array而非常规数组

尝试

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

答案 3 :(得分:0)

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

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