2017-01-19 72 views
-1

我編寫了這個函數,它顯示了數組中的一個隨機項,然後嘗試添加一個位,它不會兩次選擇相同的東西,但現在文本不會甚至表演。從數組中獲取隨機元素不超過一次

編輯感謝Pointy和喬納斯W發現。現在的工作

var lyrics = function(){ 
var olditem = document.getElementById("space").innerHTML 
var item = space[Math.floor(Math.random() * space.length)]; 
while (olditem === item) { 
    item = space[Math.floor(Math.random() * space.length)]; 
} 
if (olditem !== item) { 
    document.getElementById("space").innerHTML = item;  
}}; 
+3

檢查瀏覽器的開發者控制檯,在你的代碼的語法錯誤。 – Pointy

+3

雖然其他是無效的... –

+0

哇我完全忘了你不能有一個在while循環 – CosmicRustle

回答

0

退出時while循環,有暗示else已經在那裏。 所以我相信你的else是造成它不打印。 如果你只是刪除它,它應該沒問題。

var lyrics = function(){ 
     var olditem = document.getElementById("space").innerHTML 
     var item = space[Math.floor(Math.random() * space.length)]; 
     while (olditem === item) { 
      var item = space[Math.floor(Math.random() * space.length)]; 
     } 
     document.getElementById("space").innerHTML = item; 
    }; 
1

你爲什麼不這樣做

function lyrics(){ 
var item = Math.floor(Math.random() * space.length); 
document.getElementById("space").innerHTML=space.splice(item,1)[0]; 
} 

從陣列中刪除的項目,所以它不能再被使用......

+0

你試過運行它嗎? – Igor

+0

@Igor謝謝你提醒我splice返回一個數組... –

+0

我不認爲OP想修改'space'數組,並且賦值仍然是錯的 – Igor

0
var lyrics = function() { 
    var olditem = document.getElementById("space").innerHTML; 

    var item = space[Math.floor(Math.random() * space.length)]; 


    while (olditem === item) { 
     item = space[Math.floor(Math.random() * space.length)]; 
    } 

    document.getElementById("space").innerHTML = item; 
}; 
+0

沒有意義添加另一個+如果+返回最後是沒有意義的 –

+0

你是對的,謝謝 –

0

您可以隨機排列,然後才能採取項目。
從這裏採取隨機功能:How can I shuffle an array?

var data = [ 
 
    'one', 
 
    'two', 
 
    'three', 
 
    'four', 
 
    'five' 
 
] 
 

 
function shuffle(a) { 
 
    var j, x, i; 
 
    for (i = a.length; i; i--) { 
 
     j = Math.floor(Math.random() * i); 
 
     x = a[i - 1]; 
 
     a[i - 1] = a[j]; 
 
     a[j] = x; 
 
    } 
 
} 
 

 
var pos = 0; 
 
shuffle(data); 
 

 
var lyrics = function(){ 
 
    pos++; 
 
    if (pos == data.length) { 
 
     pos = 0; 
 
     shuffle(data); 
 
    } 
 
    return data[pos]; 
 
} 
 

 

 
console.log(lyrics()); 
 
console.log(lyrics()); 
 
console.log(lyrics());