2014-05-21 38 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"}