2014-05-21 75 views
0

我正在解析XML文件並構建一個對象數組。我得到具有相同ID的對象,並且我想將它們添加到其他ID爲相同的INDEX通過將對象按索引推送到數組來排序數組

我試圖通過ID和.push對象檢查相同的INDEX,但它不起作用。

if (myData[object.ID] = null) 
    myData[object.ID] = object; 
    else { 
     myData[object.ID].push(object); 
    } 

任何想法我怎麼能做出這樣的事情?

myData[0] = {ID: "133", text: "car 1"} 
    myData[1] = {ID: "143433", text: "car 34"} 
    myData[2] = {ID: "55", text: "car 12"} 
    myData[3] = {ID: "66", text: "car51"}, {ID: "66", text: "car56"}, {ID: "66", text: "car 323"} 
    myData[4] = {ID: "32323", text: "car132"} 

編輯:

試圖@ sebcap26,@ antur123答案後:

if (myData[object.ID] = null) { 
    myData[object.ID] = []; 
} 

myData[object.ID].push(object); 

我得到的結果是這樣的:

myData[undefined × 1,Array[3], Array[1], undefined × 1, Array[3],undefined × 1,undefined × 1,undefined × 1,undefined × 1,Array[1]] 

如何刪除那些undefined?

+0

如果要存儲多個項目有 – Bergi

+0

請閱讀我的回答和我的回答對你的評論,而不是編輯您將需要爲每個對象數組索引。 'myData'必須是一個Object,它不能是一個Array。 –

回答

0

您必須使用的物品(如關聯數組)使用的ID作爲關鍵。每個值都是一個數組。

您不能使用數組來索引它,因爲您使用的是id,而不是索引。這一點很重要,因爲如果你嘗試設置myData[143433]myData是一個數組,它會工作,但它會創建一個未定義的143434元,這是不是真的,你想要做什麼的數組...

var myData = {}; 

if(!myData[object.ID]) { 
    myData[object.ID] = []; 
} 
myData[object.ID].push(object); 

其結果將是這樣的:

var myData = { 
    "133": [ 
     {ID: "133", text: "car 1"} 
    ], 
    "143433": [ 
     {ID: "143433", text: "car 34"} 
    ], 
    "55": [ 
     {ID: "55", text: "car 12"} 
    ], 
    "66": [ 
     {ID: "66", text: "car51"}, 
     {ID: "66", text: "car56"}, 
     {ID: "66", text: "car 323"} 
    ], 
    "32323": [ 
     {ID: "32323", text: "car132"} 
    ] 
}; 
+0

結果是這樣的:'C [未定義×1, 陣列[3] , 陣列[1] ,未定義×1, 陣列[3] ]'C任何想法如何除去所有未定義的? – Dima

+0

@Dima你讀過我的答案的第二段了嗎?'myData'必須是一個對象,它不能是一個數組。 –

+0

@ sebcap26是對的。如果myData是一個數組,那麼會有很多位置的值沒有設置,並且是'未定義的'。它必須是一個「對象」。你必須明白,對於JavaScript數組,'a = []; a [100] = 1;','a'的長度是100,而不是1. –

1

您可以存儲陣列,你的「myData的」對象的各項指標如下:

if (myData[object.ID] = null) { 
    myData[object.ID] = []; 
} 

myData[object.ID].push(object); 

產生的「myData的」將是:

myData[0] = [{ID: "133", text: "car 1"}] 
myData[1] = [{ID: "143433", text: "car 34"}] 
myData[2] = [{ID: "55", text: "car 12"}] 
myData[3] = [{ID: "66", text: "car51"}, {ID: "66", text: "car56"}, {ID: "66", text: "car 323"}] 
myData[4] = [{ID: "32323", text: "car132"}] 

如果你想存儲陣列只有有不止一處的,只是在其他情況下的對象,代碼會是這樣:

if (myData[object.ID] = null) { 
    // If index is empty, store object 
    myData[object.ID] = object; 
} else if (typeof(myData[object.ID]) === 'array') { 
    // If index has an array, add object to array 
    myData[object.ID].push(object); 
} else { 
    // If index has an object, create an array and store 
    // both "old" and "new" objects 
    var oldObject = myData[object.ID]; 
    myData[object.ID] = []; 
    myData.push(oldObject); 
    myData.push(object); 
} 

然而,這導致了一個奇怪的DA ta結構,對於每個對象索引,有時會有一個數組,有時是一個對象。有點難以處理,並與工作...

在這種情況下產生的「myData的」將是:

myData[0] = {ID: "133", text: "car 1"} 
myData[1] = {ID: "143433", text: "car 34"} 
myData[2] = {ID: "55", text: "car 12"} 
myData[3] = [{ID: "66", text: "car51"}, {ID: "66", text: "car56"}, {ID: "66", text: "car 323"}] 
myData[4] = {ID: "32323", text: "car132"}