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を使用してこのデータをプロットしようとしているので、これらの値を[-112.5、15]、[0、0]、[-112.5、10]、[0、0]、[のようにx、y座標に分割する必要があります。 -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 に答える