2013-03-05 45 views
1

我已经使用jquery.csv.js像这样在一个CSV文件中读取内置了阵列:分崩离析Javascript数组数据

$.ajax(
{ 
    type : "GET", 
    url : "data.csv", 
    dataType : "text", 
    success : function(csv) 
    { 
     myData = $.csv.toArrays(csv); 
     for(var i=0; i<3; i++) 
      console.log(myData[i]); 
    } 
}); 

和输出的样本是这样的: ["-112.5", "15", "0", "0"] ["-112.5", "10", "0", "0"] ["-112.5", "5", "112.1667", "85.3819"]

我我试图用FLOT来绘制这些数据,所以我需要将这些值分解为x,y坐标,如[-112.5,15],[0,0],[-112.5,10],[0,0],[ - 112.5,5],[112.1667,85.3819]

我有尝试使用嵌套像循环:

for(var i = 0; i < myData.length; i++) 
{ 
    for(var j = 0; j < 2; j++) 
    { 
     newArray[i][j] = origArray[i][j]; 
    } 
} 

但是,这将引发一个未定义的错误,并四处寻找堆栈溢出,这是明显的JS不会在我习惯的方式处理数组。

有人请指点我正确的方向吗?

+0

@ultranaut - 对不起,我是想尽量简短,反而使事情更加复杂。我更新了变量以更好地反映我正在尝试做的事情。 myData是解析.csv文件的数组结果。 – Dave 2013-03-05 01:43:36

回答

2

这个错误是因为你无法定义newArray[i]之前设置newArray[i][j]

for(var i = 0; i < origArray.length; i++){ 
    newArray[i] = []; // <--- 

    for(var j = 0; j < 2; j++){ 
    newArray[i][j] = origArray[i][j]; 
    } 
} 

但是,你也可以(至少那些newArray)采取slices of each origArray[i]pushing them to newArray担心少一点有关索引:

for (var i = 0; i < origArray.length; i++) { 
    var innerArray = origArray[i]; 

    for (var j = 0; j < innerArray.length; j += 2) { 
     newArray.push(innerArray.slice(j, j + 2)); 
    } 
} 

http://jsfiddle.net/PxPzt/


否则,你可以得到需要用下面的预期结果的指标:

for (var i = 0; i < origArray.length; i++){ 
    for (var j = 0; j < origArray[i].length; j++){ 
     var k = i * 2 + Math.floor(j/2); 

     if (newArray[k] == null) 
      newArray[k] = []; 

     newArray[k][j % 2] = origArray[i][j]; 
    } 
} 

http://jsfiddle.net/b3tGL/

+0

切片绝对是我的选择。完美的作品。谢谢! – Dave 2013-03-05 01:57:29