带有数组作为输入的递归函数

时间:2015-06-22 22:43:32

标签: javascript angularjs

我正在尝试创建一个从胸部阵列中获取胸部练习的功能。

这个函数需要能够随机选择几个练习,这是我用随机指针完成的。为了阻止重复练习,我比较了所选择的胸部练习(即胸部[指针]),并将其与最终阵列中的所有值进行比较。

如果新练习尚未在最终数组中,则返回新选择的练习,然后将其推送到最终数组。如果它已经在最终数组中,则递归调用该函数。这个想法是函数将递归运行,直到它找到一个尚未被选择的新练习:

得到胸部:

function getChest(arr){
    var pointer = 0;
    //random array pointer
    pointer = Math.round(Math.random() * (chest.length - 1));
    //check for duplicate
    for(var i = 0; i < arr.length - 1; i++){
        if(arr[i].name === chest[pointer].name){
            return getChest(arr);
        } else {
            return chest[pointer];
        }
    }
};

主函数使用此方法随机选择exerises。最后一个数组称为“#day;#。”:

function chooseExercises(){
    for(i = 0; i <= 5; i++){
        ex = getChest(day);
        day.push(ex);
    }
 }

我遇到的问题是,当我运行它时仍然存在重复。什么是错的? (我正在使用angularJS)

1 个答案:

答案 0 :(得分:1)

将您的功能修改为

function getChest(arr){
    var pointer = 0;
    //random array pointer
    pointer = Math.round(Math.random() * (chest.length - 1));
    //check for duplicate
    for(var i = 0; i < arr.length; i++){
        if(arr[i].name === chest[pointer].name){
            return getChest(arr);
        } 
    }
    return chest[pointer];
};

基本上,循环在以全长检查值之前就已断开。

编辑:您的循环也在arr.length-1次运行,实际上应该只有arr.length