2015-12-02 3 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. Push добавляет значение в массив. – Rajesh

ответ

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

Я не знаю, где вы получаете эти данные, я просто ставил статический объект, например. Вы можете сделать функцию, чтобы получить имя класса. –

+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

спасибо! но как я могу также динамически устанавливать имена категорий «полет» и «посадка» на динамические входы? – 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; 
Смежные вопросы