1

我有一个多维数组已经通过CSV文件通过csvlib带入是否可以轻松地在ActionScript中创建索引数组关联?

我也有一个数组中的标题,我想分配这个数组作为数组的键。

这里是一个简化

具有像数据阵列所以

数据[0] - > [0]蓝色,[1] 1984年,[2]星期三 [1] - > [0]绿色,[1] 1926,[2]星期五

和键的简单阵列/属性(头阵列)像这样:

[0]的颜色,[1]年,[2]平日

我愿意数据[0] - > [颜色]蓝色,[年] 1984,[工作日]星期三 [1] - > [颜色]绿色,[年] 1926,[平日]星期五

我已经读了关联数组了一点,我没有得到如何做到这一点。 (有38个属性,以便记住这是一个索引直阵列将是非常不方便)

回答

1

嗯,你只是想你的第二级阵列是一个简单的对象,而不是。让我告诉你一些代码:

var data:Array = []; 

var record1:Object = {"colour": "blue", "year": "1984", "weekday": "wednesday"}; 
var record2:Object = {"colour": "green", "year": "1926", "weekday": "friday"}; 

data.push(record1); 
data.push(record2); 

trace("record 1:", data[0]["colour"], data[0]["year"], data[0]["weekday"]); 
trace("record 2:", data[1]["colour"], data[1]["year"], data[1]["weekday"]); 

输出:

record 1: blue 1984 wednesday 
record 2: green 1926 friday

所以我的数据数组转换成你想要的结构是这样的:

for (var i:int = 0; i < data.length; i++) { 
    var record:Array = data[i]; 
    var newRecord:Object = {}; 

    for (var index:int in record) 
    newRecord[headers[index]] = record[index]; 

    data[i] = newRecord; 
} 

现在你的数据数组是关联数组的数组。

1

我假设你的CSV使用;作为字段分隔符,您使用的URLLoader读取CSV和加载成功完成。

在你completeHandler,你现在会叫csvToArray(loader.data as String);

private function csvToArray (data : String) : Array 
{ 
    var lines : Array = data.split (/\R/); 
    var keyArray : Array = lines.splice (0, 1)[0].split (";"); 
    var assocArray : Array = []; 
    for each (var line:String in lines) 
    { 
     var valArray : Array = line.split (";"); 
     var assoc : Object = {}; 
     for (var i : int = 0; i < keyArray.length; i++) 
     { 
      var key : String = keyArray[i]; 
      if (key != null && key != "") assoc[key] = valArray[i]; 
     } 
     assocArray.push (assoc); 
    } 
    return assocArray; 
} 

这里发生了什么:

  1. 阅读CSV的第一行到keyArray
  2. 阅读所有剩余的行为valArray
  3. 使用两种填充assocArray
相关问题