2012-10-19 34 views
0

即時通訊有問題,我有一些代碼。我有下面的對象(bookingDetails),它有一個'type'屬性,它是一個數組,它存儲對象,而對象又具有另一個對象數組。例如:Javascript多對象數組問題

bookingDetails (object) 
- type(array) 
    - id 
    - share (array) 
     Number (object) 

首先是否有更好的方法來做到這一點? (我需要能夠存儲衆多'數字'對每種類型的份額)

其次,如果有人點擊一個大的'X',那麼我需要從正確的份額中刪除數字,如果份額爲空刪除共享所屬的整個類型對象。

此刻我正在試圖用下面這樣做:

for(var d in bookingDetails[data[6]]){ 
    var it = bookingDetails[data[6]][d]; 
    if(it.ID === data[0]){ 
     for(var s in it.Sharing){ 
      var pa = it.Sharing[s]; 
      for(var p in pa){ 
       var pax = pa[p]; 
       for(var pd in paxData){ 
        if(pax.PaxNo === paxData[pd]){ 
         //what to do here?? 
        } 
       } 
      } 
     } 
    } 
} 

我看了一下剪接刪除從共享陣列的對象,但那麼這將改變其對IA問題數組索引上面的循環......這一切似乎只是混亂。

任何幫助,將大大讚賞,因爲我一直在努力,現在一段時間做..

如果不這樣做的最好的方法,我很想知道一個更好的方式:)

謝謝

+1

要小心使用for ... in,IE會在d中放入類似「length」的屬性。 –

+0

謝謝 - 這個應用程序將只能運行在鉻,所以這不是一個問題。 –

回答

1

如果您打算隨時修改它,請將陣列向後走。

var i; 
for(i = myarray.length-1; i >= 0; i--){ 
    // ...something that might remove myarray[i]... 
} 

不能真正說出您的數據複雜性問題;你可能只是試圖表示覆雜的數據。也可能你應該使用具有命名屬性的對象而不是具有未命名索引的數組。無論哪種方式,爲了理智,我會建議編寫實用程序函數或甚至是對象裝飾器,以便將複雜性與代碼的其他部分隔離開來。

+0

謝謝你會試試:),你介意擴展「對象裝飾器隔離複雜性」嗎? –

+0

這裏有一個鏈接,但大多數情況下,我的意思是用簡單的方法在數據周圍放置一些對象。當你工作得更高時,抽象應該幫助你避免深入樹木中的雜草。即使比這更簡單,也許只需編寫一個函數,在找到對象時對其進行操作,因此您可以將邏輯和迭代分開。 http://en.wikipedia.org/wiki/Decorator_pattern –

0
Bookingdetails.types =array with id on the types this bookingdetail belongs to 
Bookingdetails.id=Number id of the bookingdetails 

Type.id= Number, id of the type 
Type.share=Array with bookingdetails id. 

這將佔用更多的空間,但查找起來會快一些。 它會使請求的操作更簡單。如果你使用Typescript,它會更容易;-)