【问题标题】:Calling random function without duplicates调用没有重复的随机函数
【发布时间】:2014-01-17 19:32:34
【问题描述】:

我正在使用 javascript 创建一个随机 photo365 挑战列表生成器。我有一个包含 365 个不同功能的列表,其中包含不同的作业名称/页面链接(这可能不是最好的方法,但它有效) 它按预期工作,它确实调用了 365 个函数并将它们放在一个列表中......

但我想做的是防止重复。 (请注意,下面的代码没有列出所有的 365 函数)

我搜索了堆栈溢出,并遇到了各种防止重复的方法。但是每当我尝试添加新代码时,我都无法让它工作。

我真的不是很熟练 javascript,所以您可以提供任何指导将非常感激...

诺埃尔

//新建一个待办事项

function randomFrom(array) {return array[Math.floor(Math.random() * array.length)];}
 function randomCreate() {
    var func = randomFrom([createNew365ToDo, 
                           createNew365ToDoBulb, 
                           createNew365ToDo2, 
                           createNew365ToDoShallow, 
                           createNew365ToDoWide, 
                           createNew365ToDoLenses, 
                           createNew365ToDoMacro, 
                           createNew365ToDoAToZ]);
    (func)();
}

function createNew365ToDoList()
{
    deleteAll365Rows();
    for (var p = 0; p < 365; p++) { 
    { 
         randomCreate();
    }
}}

【问题讨论】:

    标签: javascript random


    【解决方案1】:

    我会这样做:

    //are arrays passed by reference? I don't remember, so let's just make it available to everything to demonstrate
    
    var fnArray = [createNew365ToDo, createNew365ToDoBulb, createNew365ToDo2, createNew365ToDoShallow, createNew365ToDoWide, createNew365ToDoLenses, createNew365ToDoMacro,createNew365ToDoAToZ];
    
    function randomFunction() {
        //get a random index from the list
        var index = Math.floor(Math.random() * fnArray.length);
        //save that function to fn, and REMOVE it from the list
        var fn = fnArray.splice(index, 1);
        //return that function - now, when randomFunction() gets called again, you won't ever 
        //return the same function since it's no longer in the list
        return fn;
    }
    
    function callRandomFunction() {
      var func = randomFunction();
      (func)();
    }
    

    【讨论】:

    • 感谢您的帮助!我尝试了代码,但在开发者控制台中出现以下错误:TypeError: func is not a function
    • 已编辑,没有注意到我将这两个函数称为同一个东西
    • 谢谢戴夫!效果很好。
    猜你喜欢
    • 1970-01-01
    • 2015-02-27
    • 1970-01-01
    • 2020-01-05
    • 2020-12-26
    • 2011-05-01
    相关资源
    最近更新 更多