2014-01-12 88 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');

相關問題