Javascript:解析txt文件,将数据传递给数组

时间:2013-06-07 17:22:35

标签: javascript arrays parsing

晚上好。我是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。而不是线条。我做错了什么?

3 个答案:

答案 0 :(得分:4)

这应该有效:

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

答案 1 :(得分: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");

跳过循环。在这种情况下,不要在开始时将新的Array()分配给nodeArray,因为无论如何你将用其他数组替换该值。

或者,如果要将行解析为JSON对象,

nodeArray = new Array();

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

答案 2 :(得分:1)

您也可以将线条推送到数组上,而不是使用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.