从阵列中获取随机元素不超过一次

时间:2017-01-19 17:22:36

标签: javascript arrays

我写了这个函数,它显示了数组中的一个随机项,然后尝试添加一点,它不会选择相同的东西两次,但现在文本甚至都没有显示。

编辑感谢Pointy和Jonas 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;      
}};

4 个答案:

答案 0 :(得分:1)

为什么不这样做

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

从数组中删除项目,因此无法再次使用...

答案 1 :(得分: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;
    };

答案 2 :(得分: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;
};

答案 3 :(得分: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());