2014-01-12 60 views
1

我正在研究一个简单的程序,它将从数组中选择一个随机字符串。导致未定义的JavaScript split()方法

我从一个预定义的数组开始,但大约一半的时间都在想知道使用text file (.txt)会不会更简单(或更优雅),因为我有1000多个项目。

我发现这个解决方案在这里(我将不采取任何信贷),它为我工作...

function readTextFile(file) { 
    var items = []; 
    var rawFile = new XMLHttpRequest(); 
    rawFile.open("GET", file, true); 
    rawFile.onreadystatechange = function() { 
     if(rawFile.readyState === 4) 
     { 
      if(rawFile.status === 200 || rawFile.status === 0) 
      { 
       var items = rawFile.responseText.split('\n'); 
       alert(items[0]); 
      } 
     } 
    }; 
    rawFile.send(null); 
} 

readTextFile('source.txt'); 

...的程度。

我希望array items[]每个项目包含一行。换句话说,我想分割每一条新线。但是,当我使用split('\n')时,所有数组项目在items[0]之后都是undefiend。

items[0]在上面的例子中成为第一句话,所以很正确。如果我想alert items[1]我得到undefined。

如果我使用其他分割点(例如split('')),它可以正常工作,每个项目只分隔每个字符,直到换行为止,之后再次取消定义。

比方说,.txt is "asd"的第一行: 如此“ASD”在数组定义为:

items[0] = 'a' 
items[1] = 's' 
items[2] = 'd' 
items[3] = undefined 

这是我会得到。我错在哪里?

谢谢!

编辑:

文本文件

asfe 
asdasdasd 
asdasd 

fgfg 
+0

我会用数组,算上有多少项目,然后选择该数量之间的随机数字并用它来调用该数组项目。 – pathfinder

+0

哦,随机选择尚未实现,但不认为我会有问题(还)。现在我只想保证我所有的数组项目都是正确的。谢谢你! – Tiago

+0

如何保存该文件?什么是你的文本编辑器?我怀疑这个换行符不是真的'\ n'。 –

回答

0

大概的内容,因为有一个空行的responseText结束。尝试使用trim()

var items = rawFile.responseText.trim().split('\n'); 
+1

请问您可以发布'source.txt'的内容吗? – BenM

+0

当然!这只是一个测试文件,但我会编辑它。 – Tiago

+1

问题不在于文件末尾为空行,而是在第三个索引处。你可以做的不是很多,以避免它通过JavaScript进入。相反,你需要处理数组中未定义的值。 – BenM

1

后一些与此乱搞,我相信这个问题是与你的文本编辑器,保存由\r,而不是\n换行符的文件,或许基于Unix的服务器?

无论如何,你可以取代那些和它应该工作:

var rawText = rawFile.responseText; 
rawText = rawText.replace(/\r\n/g, "\n"); 
rawText = rawText.replace(/\n\r/g, "\n"); 
rawText = rawText.replace(/\r/g, "\n"); 
var items = rawText.split('\n'); 
2

尝试添加字符串转换:

var items = String(rawFile.responseText).split('\n');

相关问题