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