2014-05-19 99 views
0

下面的代碼在JavaScript中使用得非常好。換句話說,我可以打印單元格[5]任何指定的索引值。但我想打印這個循環,但它不起作用。有沒有人知道它爲什麼不起作用。在JavaScript中使用對象數組

$(document).ready(function() { 
    var grid_arr = new Array(); 
    var count = 0; 
    var cell; 
    cell = { 
     x1: 10, 
     y1: 10 
    }; 
    alert(cell.x1); 
    for (i = 1; i < 10; i++) { 
     cell[i] = { 
      x1: i * 5, 
      y1: i * 2 
     }; 
    } 
    alert(cell[5].x1); 
}); 


/* The below for loop does not display any messages: */ 

for (var j = 0; j < 9; j++) { 
    alert(cell[j].x1); 
} 
+0

首選數組文字'[]'到'新的Array()' –

+0

你在哪裏放第二個循環? '$(document).ready'之外? – putvande

+1

'for(i = 1; i <10; i ++){'爲什麼從1開始? – Abhitalks

回答

1

運行該代碼拋出一個TypeError: Cannot read property 'x1' of undefined

這意味着的cell[j].x1cell[j]部分是undefined

基本上,運行時:

for (var j = 0; j < 9; j++) { 
    alert(cell[j].x1); 
} 

cell[0]不存在。原因是您的for循環以不同的數字開始計數。

要麼改變第二for環路開始在1計數,或更改第一個:

for (i = 1; i < 10; i++) { 
    cell[i] = { 

爲了從0開始。

試着數留在你初始化循環的方式一致。優選地,始終將索引初始化爲0,因爲大多數計數在JS中是基於零的。

+0

我認爲解決了這些問題。但是代碼單元= { x1:10, y1:10 };不把它分配給單元格[0]? – Happy

+0

@快樂:不,它沒有。 'cell = {x1:10,y1:10};'只是告訴JavaScript將'{x1:10,y1:10};'的對象值賦給'cell'。那麼你將擁有'cell.x1 === 10'。 – Cerbrus

+1

酷..感謝您找出解釋。 – Happy

0

cell是一個變量本地挖出來,你傳遞給ready匿名函數。

這意味着你有兩個問題:

  1. 變量是無法訪問的全球
  2. 變量就緒事件觸發

後,尚未分配的值,直到將你最後的循環在匿名函數內部或將該函數中的所有代碼移到其外部。


你的第一個循環也開始在1,而你在0秒開始這意味着,(一旦上述所有排序),你會試圖提醒undefined.x1將拋出異常。

要麼在同一個點上啓動你的循環,要麼在測試前確定一個值,然後再嘗試讀取它的屬性。

0

下面的代碼工作正常。請試試這個。

var grid_arr = new Array(), 
    count = 0, 
    cell = new Array(); 
for (i = 1; i < 10; i++) { 
    cell.push({ 
     x1: i * 5, 
     y1: i * 2 
    }); 
} 
for (var j = 0; j < cell.length; j++) { 
    console.log(cell[j].x1); 
} 

感謝,

+0

如果通過_「Just fine」_,你的意思是_「只記錄'cell'預期內容的90%」_,你說得對。 (cell只有9個屬性) OP代碼中的問題是'for'循環中的不一致。你的答案中仍然存在這個問題。 – Cerbrus

0

在這麼短的代碼,所以許多錯誤。 grid_arr,count未被使用。對於不與DOM交互的事物,您不需要使用jQuery的文檔就緒函數。在第一個for循環中,索引從1開始,然後在第二個for循環中,索引從零開始。這是你如何去做的;

for(var cell = [], i = 1; i < 10; i++){ 
    cell.push({ 
     x1: i * 5, 
     y1: i * 2 
    }); 
    alert(cell[i-1].x1); 
} 
+0

'<9'和'<10'? – Cerbrus

+0

@ user3597525,同意這些變量不會鏈接到我在這裏發佈的代碼,但在代碼的其餘部分使用它們,並且還使用jquery方法。此外,您發佈的代碼不起作用。 – Happy

+0

Cerbrus,如果arr的第一個從1開始,第二個從零開始,什麼是10-1?它確實有效。剛剛測試過它。打印出5,10,15,20,25,30,35,40,45 – user3597525