2014-01-19 194 views
1

目前我有一個填充數組的問題,我在代碼中調用了input,我的代碼中調用了athlete。使用其他幾個數組實例化了名爲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(輸入)檢出它,然後可以使用數據結構進行播放。

例:

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

您展現運動員的高度財產可以通過數組索引和屬性名稱訪問您的對象。此行document.getElementById("demo").innerHTML=input更改此代碼(列表中的所有對象的性別和balleyscore在UL#演示):

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

瀏覽器控制檯是用於調試目的非常有用的。嘗試在控制檯對象創建後,加入這行和檢查數組:

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