打破Javascript数组数据

时间:2013-03-05 01:21:49

标签: javascript arrays flot

我有一个数组是通过使用jquery.csv.js读取csv文件而构建的,如下所示:

$.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循环,如:

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

但是这会抛出一个Undefined错误并查看堆栈溢出,很明显JS不会像我习惯的那样处理数组。

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

1 个答案:

答案 0 :(得分:2)

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

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

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

但是,通过slices of each origArray[i]pushing them to newArray,您还可以更少关注索引(至少是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/