【问题标题】:Creating associative array in a for-loop在 for 循环中创建关联数组
【发布时间】:2012-12-28 22:09:28
【问题描述】:

我有一个很大的 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(columns)和一个rowid。 我正在尝试将所有这些数据循环到一个关联数组中:

    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
                    }
               };
            }
        }
    }

问题是我想在“column”键中创建一个新数组,该数组循环所有 C(列)数据,以便我可以使用以下内容访问这些数据:columnData[0]['column'][0 ]['columnID']

【问题讨论】:

  • 您是否已经考虑过递归函数?
  • 你能改变源的结构还是为你固定?
  • @HMarioD 来源无法更改,数据是从外部网络服务拉取的
  • 刚才我放了一个可能的答案,看看吧。

标签: javascript xml for-loop multidimensional-array associative-array


【解决方案1】:

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

【讨论】:

    【解决方案2】:
    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']

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-29
      • 2012-03-18
      • 1970-01-01
      • 2013-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-11
      相关资源
      最近更新 更多