试图防止DIV中的重复随机项

时间:2017-02-15 17:36:36

标签: javascript jquery arrays

任何人都可以帮我吗?我需要做的就是防止重复显示。我正在填充一个数组并随机生成食谱。刷新页面时,有时同一项目会出现两次。我需要防止这种情况发生。我在底部包括一个小提琴谢谢。

以下是我的代码:

 /** Thrown when a player attempts an illegal move in a game. */  
 public class IllegalMoveException extends Exception {  
}

这是一个小提琴:{{3}}

3 个答案:

答案 0 :(得分:2)

选择一个随机项后,只需将其从数组中删除,这样就不会再次选择它了:

var randomIndex = Math.floor(Math.random()*categoryItems.length);

randomRecipe = categoryItems[randomIndex];

categoryItems.splice(randomIndex, 1);

更新了小提琴:https://jsfiddle.net/bLpqvs4f

答案 1 :(得分:1)

我想在这种情况下你想从n中取出recipe_data个不同的项目? 在这种情况下,您应该编写指定的函数来获取所需的项目

function getRandomItems(noOfItems, source){
    var samples = source.slice();
    var results = [];

    for(var i=0; i < noOfItems;i++){
        results = results.concat(samples.splice(Math.floor(Math.random() * samples.length), 1));
    }

    return results;
}

这里需要注意的一点是使用.slice()来浅层复制数组,而不是运行for循环来添加项目,当你想从数组.splice()中提取项目时,就是函数选择。

请参阅演示:https://jsfiddle.net/wn4fmm5r/3/

答案 2 :(得分:1)

可以将最后一个配方ID存储在本地存储中,以防止再次显示它(我想刷新意味着重新加载页面?)?

var showed=localStorage.getItem("stored")||[];//get the recipes already showed
var id;
while(!id||showed.find(el=>el===id)){//retry until generated a new one
     id=Math.floor(Math.random()*categoryItems.length);//generate new one
}
showed.push(id);
localStorage.setItem("stored",showed);//store again
randomRecipe = categoryItems[id];//your new & random recipe

与其他答案不同,这也适用于浏览器刷新...