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

问题是,如果我留下最后一行并尝试打印结果,它会正常出现(整行),当我尝试填充数组时,它只在每一行中输入一个字符,最终结果是 [ [ 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 回答