2014-01-19 3 views
1

В настоящее время у меня есть проблемы с заполнением массива, который я называю input в моем коде с объектом, который я называю athlete в моем объекте code.The, который называется athlete конкретизируется с помощью несколько других массивов. Я прикрепил к этому сообщению ссылку jsfiddle, которая в основном упрощенная версия с той же проблемой. Я знаю, что логика может выглядеть излишней, но это потому, что это необходимо для этого примера (фактическая логика будет работать с пользовательским вводом).Заполнение массива с объектами в Javascript

Моя проблема заключается в том, что я заполняю массив объектами new Athlete, но я не могу получить доступ к определенному свойству объекта в массиве.

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

var input = new Array(); 
var girl=[1,1,1,1]; 
var boy = [1,1,1,1]; 
var balleyscore = [100,400,320,50]; 
var boyHeight = [72,68,65,75]; 
var girlHeight=[60,57,65,55]; 
var boyAge = [19,32,22,25]; 
var girlAge = [20,15,32,18]; 
//the above are all generate from user inputs 
// they go into the object constructor below 
function athlete(girl, boy,balleyscore, height, age){ 
this.girl=girl; 
this.boy=boy; 
this.balleyscore=balleyscore; 
this.height=height; 
this.age = age; 
}; 
function insertToObjectArray() 
{ 
    var j=0;     
    var i=0; //insert all our data into one array of the load object 
    for(j = 0; j < girl.length;j++) 
    { 
     input[j]= new athlete(true,false,balleyscore[j],girlHeight[j],girlAge[j]); 
    } 
    for(j = girl.length; j <=girl.length+boy.length;j++) 
    { 
     input[j]= new athlete(false,true,0,boyHeight[i],boyAge[i]); 
     i++; 
    } 
}; 
insertToObjectArray(); 

document.getElementById("demo").innerHTML=input; 

http://jsfiddle.net/qC5j4/1/

+0

'Я не могу получить доступ к конкретному свойству объекта в array.' не достаточно для отладки программы. :( – thefourtheye

+0

И какое свойство вы пытаетесь получить? Что именно не работает, как вы ожидаете? –

+0

Мне нужно иметь доступ ко всем свойствам – bala

ответ

1

Чтобы получить доступ к свойству объекта в вашем входе массива:

input[0].age 

это позволит вам получить доступ к возрасту первого спортсмена

также можно получить доступ так:

input[0]['age'] 

В любом случае они будут отображать 20 в качестве возраста первого спортсмена в массиве.

Проверьте это с помощью console.log (ввода) в отладчике, а затем вы можете играть с структурой данных.

Ex:

document.getElementById("demo").innerHTML=input[0].age; 
1

Не совсем уверен в вашей проблеме, вот я обновил свою скрипку, чтобы отобразить свойство высоты ваших спортсменов, добавив строку

output[j]= input[j].height 

fiddle

+0

Почему я не могу просто отображать высоту с помощью ввода [j] .height? – bala

+0

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

+0

вы можете сделать это, в вашей скрипке у вас есть массив объектов, который вы написали на экран, так что вы отобразили «объект», я просто изменил его на вывод на экран как объект Object.property, чтобы отобразилось свойство – RoyTheBoy

1

You может получить доступ к вашим объектам по индексу массива и имени свойства. Измените эту строку document.getElementById("demo").innerHTML=input этому коду (список всех объектов секс и balleyscore в уль # демо):

for (var i=0; i<input.length; i++) { 
    var node = document.createElement('li'), 
     txt = document.createTextNode(
      (input[i].girl? 'girl' : 'boy') + ' ' + input[i].balleyscore); 
    node.appendChild(txt); 
    document.getElementById("demo").appendChild(node); 
} 

HTML:

<p><ul id="demo"></ul></p> 

FIDDLE

Browser консоль очень полезна для отладки. Попробуйте добавить эту строку после создания объектов и проверить ваш массив в консоли:

insertToObjectArray(); 
console.log(input);  // output input array to console 
1

Ваш объект спортсмен должен быть, например:

function athlete(age) 
{ 
    this.age = age; 
} 

var item = new athlete(10); 
item.age;//10 
1

Вы можете показать рост и возраст, как это:

var output = ""; 
for(var i = 0, length = input.length; i !== length; i++) { 
    output += "height: "+input[i].height + ", age: " + input[i].age + "<br />"; 
} 
document.getElementById("demo").innerHTML=output; 

И есть небольшая ошибка. Используйте

j < girl.length+boy.length 

вместо

j <=girl.length+boy.length 
+0

во всяком случае, это опасная конструкция. скорее используйте для (i = 0; i miraculixx

Смежные вопросы