我正在尝试创建一个从胸部阵列中获取胸部练习的功能。
这个函数需要能够随机选择几个练习,这是我用随机指针完成的。为了阻止重复练习,我比较了所选择的胸部练习(即胸部[指针]),并将其与最终阵列中的所有值进行比较。
如果新练习尚未在最终数组中,则返回新选择的练习,然后将其推送到最终数组。如果它已经在最终数组中,则递归调用该函数。这个想法是函数将递归运行,直到它找到一个尚未被选择的新练习:
得到胸部:
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)
答案 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
。