2014-01-22 92 views
0

我創建的JavaScript二維陣列JavaScript的二維陣列

代碼是:

var field_arr=[]; 

      $(".dr").each(function(index){ 

      Id=$(this).attr("id"); 
      alert(dragId); 
      topPos=$("#"+ dragId).position().top; 
      left=$("#"+ dragId).position().left; 
      parentDiv=$("#"+dragId).parent().attr("id"); 
      parentDiv= parentDiv.split('-'); 
      paId=parentDiv[1]; 
       field_arr[Id]=new Array(); 
       field_arr[Id]['paId']=paId; 
       field_arr[Id]['top']=topPos; 
       field_arr[Id]['left']=left; 


      }); 


      console.log(field_arr); 

輸出是:

[未定義,[]左PAID 「1」 140頂10

什麼是它的問題任何幫助應該明白。

+0

javascript的數組只是數字,對於關聯的「數組」你應該使用對象據我所知 – aleation

+0

@aleation你錯了。 JS數組是對象,可以用作常規對象。這樣做通常在語義上不正確,但可以完成。 – Tibos

+0

我的意思是,你必須將它創建爲一個對象'{}'而不是數組[]來創建字符串索引,對嗎?或者我錯了? – aleation

回答

0

你正在存儲一個關鍵字串的值和它的錯誤,因爲你聲明你的field_arr是一個數值數組(好吧,沒有這樣的事情,我認爲JavaScript的關聯數組)。

field_arr[Id] = new Array(); 
field_arr[Id]['paId']=paId; //this is wrong 

你需要創建一個對象的值來存儲,就好像它們與字符串鍵關聯。但是,從字面上他們是對象的屬性

重新聲明它像這樣

field_arr[Id] = {}; //you create an object 
field_arr[Id]['paId'] = paId; //create an object property named paId and store a value 
field_arr[Id].paId = paId; //you can also access property paId like this 

編輯: 但以符合你目前的代碼,你可以通過訪問它像一個對象的屬性訪問使用字符串索引。 (感謝Tibos

var field_arr=[]; 
... 
... 
field_arr[Id].paId = paId; 
1

問題在於你的數組的顯示方法。信息在那裏,但alertconsole.log都不會顯示給你,因爲預計數組唯一有趣的屬性是數字索引。

在JavaScript中,與PHP不同,對象用作地圖/關聯數組。

首先檢查你的信息是居然還有:

$(".dr").each(function(index){ 
    var Id=$(this).attr("id"); 
    console.log(Id, field_arr[Id]['paId'], field_arr[Id]['top'], field_arr[Id]['left']); 
}); 

我們做出使顯示方法的工作,你可以去了解多種方式,但最好的一個是使用對象,而不是:

var field_arr = Object.create(null); // replace with {} if you want to support IE8- 

$(".dr").each(function(index){ 
    var id = $(this).attr("id"); // added var to keep variable local 
    var drag = $("#"+dragId); 

    field_arr[id] = Object.create(null); // {} 

    field_arr[id]['paId'] = drag.parent().attr("id").split('-')[1]; 
    field_arr[id]['top'] = drag.position().top; 
    field_arr[id]['left'] = drag.position().left; 
}); 

console.log(field_arr); 

遍歷對象的屬性是很容易的:

for (var id in field_arr) { 
    console.log(field_arr[id], field_arr[id]['paId'], 'etc'); 
} 

添加hasOwnProperty檢查你的對象是否不從null繼承(var obj = {}需要它,不像var obj = Object.create(null)