在for循环中创建关联数组

Creating associative array in a for-loop

本文关键字:关联 数组 创建 for 循环      更新时间:2023-09-26

我有一个大的xml文档,我试图在javascript中处理成一个数组。

<DR>
   <C>
     <SWDGDRC>
       <CID>0</CID>
       <V>06/01/2012 00:00:00</V>
     </SWDGDRC>
     <SWDGDRC>
       <CID>1</CID>
       <V>1131</V>
     </SWDGDRC>
     <SWDGDRC>
       <CID>2</CID>
       <V>28800</V>
     </SWDGDRC>
   </C>
   <rowid>0</rowid>
</DR>
<DR>
   <C>
     <SWDGDRC>
       <CID>0</CID>
       <V>06/02/2012 00:00:00</V>
     </SWDGDRC>
     <SWDGDRC>
       <CID>1</CID>
       <V />
     </SWDGDRC>
     <SWDGDRC>
       <CID>2</CID>
       <V />
     </SWDGDRC>
   </C>
   <rowid>1000</rowid>

由多个DR(datarow)组成,每个DR有多个C(列)和一个row(行)。我试图将所有这些数据循环到一个关联数组中:

    for(var i=0; i < DR.length; i++) {          // loop DR
        for(var j=0; j < DR[i].getElementsByTagName('C').length; j++) {    // loop C
            for(var k=0; k < DR[i].getElementsByTagName('C')[j].getElementsByTagName('SWDGDRC').length; k++) {   //loop SWDGDRC
                columnData[i] = {
                    "rowid": DR[i].getElementsByTagName('rowid')[0].textContent,
                    "column": {
                       columnID: DR[i].getElementsByTagName('C')[j].getElementsByTagName('SWDGDRC')[k].getElementsByTagName('CID')[0].textContent,
                       value:DR[i].getElementsByTagName('C')[j].getElementsByTagName('SWDGDRC')[k].getElementsByTagName('V')[0].textContent
                    }
               };
            }
        }
    }

问题是我想在"列"键中创建一个新的数组,循环所有的C(列)数据,所以我可以使用这样的东西访问这些数据:columnData[0]['column'][0]['columnID']

DRCollection[] -> DRCollection[0] = row_id, DRCollection[1] = colCollection[].

for(var i=0; i < DR.length; i++) {          // loop DR
        for(var j=0; j < DR[i].getElementsByTagName('C').length; j++) {    // loop C
            columnData[i] = new Array(DR[i].getElementsByTagName('C')[j].getElementsByTagName('SWDGDRC').length);
            columnData[i] = {
                rowid: DR[i].getElementsByTagName('rowid')[0].textContent
            }
            for(var k=0; k < DR[i].getElementsByTagName('C')[j].getElementsByTagName('SWDGDRC').length; k++) {   //loop SWDGDRC
                columnData[i][k] = {
                    columnID: DR[i].getElementsByTagName('C')[j].getElementsByTagName('SWDGDRC')[k].getElementsByTagName('CID')[0].textContent,
                    value:DR[i].getElementsByTagName('C')[j].getElementsByTagName('SWDGDRC')[k].getElementsByTagName('V')[0].textContent
                };
            }
        }
    }

使用前面的代码修复了它。首先,我用我要循环的数组的长度创建一个新的数组,然后我设置'rowid'字段。这样我可以访问我的数据:columnData[0][0]['columnID']