2013-03-05 43 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