2017-01-19 44 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());