2011-04-07 96 views
1

我有一個多行的變量,要選擇一個隨機行:的JavaScript:數組未定義

$.get('namelist.txt', function(nameList) { 
    name = nameList.split('\n'); 
    var i = random(); 
    alert(name[i]); // this is undefined 
}); 

random()函數返回一個隨機數:

function random() { 
    return Math.floor(Math.random()*201); 
} 

的問題是,警報說undefined。如果我用var i = 5替換第3行,它可以工作。我測試了itypeof,他們在兩種情況下都是數字。有想法該怎麼解決這個嗎?

+1

也許'name'有少於200個元素? – Emmerman 2011-04-07 11:37:18

+0

數組中有200個項目嗎? – 2011-04-07 11:38:53

+0

你真的**想要在你的函數中將'var'放在'name'前面。如果沒有它,除非在引用的代碼的範圍內定義了'name',否則您將覆蓋'window.name'屬性(這幾乎肯定不是您想要的)。一般來說,一定要聲明你的變量,以免受到[*隱式全局的恐怖*](http://blog.niftysnippets.org/2008/03/horror-of-implicit-globals.html) 。 – 2011-04-07 11:46:17

回答

4

根據數組的長度,您應該生成一個隨機數。 201可能超出陣列的最高指數。

你可以調整你的隨機函數接受的長度,而不是:

function random(len) { 
    return Math.floor(Math.random() * len); 
} 

,然後用它是這樣的:

var name = nameList.split('\n'); 
var i = random(name.length); 
alert(name[i]); 

Array documentation reference

+0

as function random(){ return Math.floor(Math.random()* nameList.length); } – mplungjan 2011-04-07 11:37:25

+1

只能從這裏刪除'-1':) – Emmerman 2011-04-07 11:40:00

+0

@Emmerman:如果數組的長度是10,那麼它可能會生成索引10,該索引將會很高。因爲指數範圍從0到9. – Kevin 2011-04-07 11:41:39

1

Thsi是因爲這個名字是一個數組

其中可能包含讓我說3個元素在我t

如果隨機函數的值超過3,它會給你一個錯誤,因爲你現在有。

上建議

第一改變所述陣列中沒有元素和由隨機函數生成的數目。

if (name.length< randomnumber) 
{ 
    //do logic what you want 
} 
0
var i = Math.floor(Math.random()*name.length); 
-1

你嘗試

變種I = parseInt函數(隨機());

+0

'Math.floor'不返回字符串。 – 2011-04-07 11:47:23

0

是否有可能在nameList.txt中有少於201行的文本?