0

文字列の配列 ( objData) を個々の要素に分割し、これらを 2D 配列 ( sequence) の最初の行にコピーしたいと考えています。以下のコードを参照してください。

for(i = 0; i < objData.length; i++)
{
    console.log("objData[i]: " + objData[i]);
    parts = objData[i].split(' ');
    sequence[0][n] = parts[1];
    console.log("sequence[0][n]: " + sequence[0][n]);
    sequence[0][n+1] = parts[2];
    sequence[0][n+2] = parts[3];
    n+=3;
    parts = [];
}

Notenは 0 として初期化されます。 の各要素objDataは、以下に示す形式の文字列です。

objData[0] = "v 2.11733 0.0204144 1.0852"

区切り文字として空白を使用してこれらの文字列を ( のすべての要素から) 分割しobjData、10 進数値を の最初の行にコピーしたいと考えていますsequence。また、これらの文字列値を浮動小数点に解析したいと考えています。

上記のコードを使用すると値がコピーされますが、最初の行の内容は次のsequenceようになります。

[2.11733NaN, 0.0204144NaN, 1.0852NaN, 2.12303undefined, 0.0131256undefined ..... etc.]

残りの要素にはすべて、示されているように「未定義」が追加されています。

次の行を使用して、浮動小数点に解析しようとしました:

parts = objData[i].split(' ').map(parseFloat);

ただし、sequence当時の内容は次のとおりです。

    [2.11733, 0.0204144, 1.0852, NaN, NaN ..... etc.]

誰かがこのデータを分割して解析する方法を教えてくれたら、大歓迎です! ありがとうございました。

4

1 に答える 1

0

あなたはこれについて大変な仕事をしているように私には思えます。

これを段階的に見てみましょう:

// Make sure sequence array is empty
sequence = [];

// We want to process each element of the objData array :
objData.forEach (function (obj_n) {
  // First split the element, one or more spaces separate fields
  obj_n = obj_n.split (/ +/); // obj_n is now an array
  // Extract elements 1 to 3
  obj_n = obj_n.slice (1, 4); // obj_n is now the three data values
  // Append the three elements to the sequence array:
  sequence = sequence.concat (obj_n);
});

// Now convert to numbers:
sequence = sequence.map (function (f) { return +f });

よりコンパクトに :

sequence = [];
objData.forEach (function (obj_n) {
  sequence = sequence.concat (obj_n.split (/ +/).slice (1, 4));
});
sequence = sequence.map (function (f) { return +f });

以下の op コメントで追加の制約に答える

function parseObjData (objData, m, n) { // Add n items to sequence m
  if (!sequence[m]) // make sure sequence[m] exists
    sequence[m] = [];

  objData.forEach (function (obj_n) {
    sequence[m] = sequence[m].concat (obj_n.split (/ +/).
                              slice (1, n + 1));
  });
  sequence[m] = sequence[m].map (function (f) { return +f });
}
于 2015-03-27T18:11:19.673 に答える