我有一个通过使用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];
    }
}


但这会引发未定义的错误,并四处查看堆栈溢出,显然JS不能像我以前那样处理数组。

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

最佳答案

该错误是因为在定义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 newArraypushing them to origArray[i]来减少对索引(至少是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/

关于javascript - 分解Javascript数组数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15214180/

10-12 16:19