5

こんばんは。私は Javascript に本当に慣れていないので、友人との小さなサイドプロジェクトを支援するためにいくつかのコースを受講しています。

私の問題は、Javascript を使用して、次の形式の txt ファイル (Java プログラムのアルゴリズムを介してオフラインで生成する) を読み取ることです。

 [[37.928],[23.6965]]
 [[37.9305],[23.69675]]
 [[37.9315],[23.69775]]
 [[37.9335],[23.69975]]
 [[37.9350],[23.69999]]

次の Javascript は、そのファイルを解析し、それらの値を配列として返そうとします。各行は配列内の行です。

<iframe id="frmFile" src="test.txt" onload="LoadFile();" style="display: none;"></iframe>
<script type="text/javascript">

var nodeArray=new Array();  

function LoadFile() {
    var oFrame = document.getElementById("frmFile");
    var strRawContents = oFrame.contentWindow.document.body.childNodes[0].innerHTML;
    while (strRawContents.indexOf("\r") >= 0)
        strRawContents = strRawContents.replace("\r", "");
    arrLines = strRawContents.split("\n");
    for (var i = 0; i < arrLines.length; i++) {
        nodeArray = arrLines[i];
    }
}

問題は、最終行を省略して結果を出力しようとすると、通常どおり (行全体)、配列に入力しようとすると、各行に 1 文字しか入力されず、最終結果が [ [ 3 になることです。 7 。線の代わりに。私は何を間違っていますか?

4

3 に答える 3

5

これはうまくいくはずです:

var nodeArray=new Array();  

function LoadFile() {
  var oFrame = document.getElementById("frmFile");
  var strRawContents = oFrame.contentWindow.document.body.childNodes[0].innerHTML.replace(/\r/g, '');
  var arrLines = strRawContents.split("\n");
  arrLines.forEach(function (line) {
    nodeArray.push(JSON.parse(line));
  });
}
于 2013-06-07T17:45:07.180 に答える
2

JSON を使用する代わりに、行を配列にプッシュすることもできます。

var arrLines = strRawContents.split("\n");

for (var i = 0; i < arrLines.length; i++) {
    nodeArray.push(arrLines[i]);
}

console.log( arrLines ); // see what we have here.
于 2014-02-07T11:26:55.820 に答える
1

各文字列を順番に nodeArray に割り当てているように見えますが、後で nodeArray をループして、nodeArray[0]、nodeArray[1] などを見ていると思います。それを行うと、nodeArray[0]配列の最初の文字ではなく、文字列の最初の文字になります。JavaScript では、任意の変数が任意の種類の値を保持でき、配列を文字列に置き換えています。配列は一連のオブジェクト (この場合は文字列) であり、文字列は一連の文字です。同じ構文を使用して、いずれかの連続する要素にアクセスします。

各行を nodeArray に追加する場合は、次のようにします。

for ( var i = 0; i < arrLines.length; ++i )
{
    nodeArray.push(arrLines[i]);
}

...しかし、arrLines を別の配列にコピーする必要さえありません。arrLines は、あなたが何をしているのかを理解していれば、あなたが望む配列だと思います。だからこれをしてください:

nodeArray = strRawContents.split("\n");

そして、ループをスキップします。その場合、最初に new Array() を nodeArray に割り当てる必要はありません。とにかくその値を他の配列に置き換えることになるからです。

または、行を JSON オブジェクトとして解析する場合は、

nodeArray = new Array();

for ( var i = 0; i < arrLines.length; ++i )
{
    nodeArray.push(JSON.parse(arrLines[i]));
}
于 2013-06-07T17:45:02.617 に答える