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

Javascript: Parsing a txt file, passing the data to an array

本文关键字:一个 数据 数组 Javascript txt 文件      更新时间:2023-09-26

晚上好。我对Javascript真的很陌生,我一直在学习一些课程来帮助我完成一个和朋友一起做的小项目。

我的问题是,我使用Javascript读取一个文本文件(我通过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];
    }
}

问题是,如果我离开最后一行并尝试打印结果,它通常会出现(整行),当我尝试填充数组时,它只在每行中输入一个字符,最终结果为[[37]。而不是线条。我做错了什么?

应该可以:

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

不使用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.

看起来您依次将每个字符串分配给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]));
}
相关文章: