1

我有一个数组,它是通过使用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 没有以我习惯的方式处理数组。

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

4

1 回答 1

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];
  }
}

newArray但是,您也可以通过对每个索引进行切片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/

于 2013-03-05T01:47:22.447 回答