Javascript 递归函数
我有一个数字数组,通过我的_number函数我创建一个随机数字,如果它已经存在于数组中,我再次调用该函数并创建一个新的随机数字,如果它不在数组中,我通过push发送给它 不幸的是,在浏览器崩溃之前,总是反复发送所有号码 我怎样才能解决这个问题 谢谢你的帮助Javascript 递归函数,javascript,Javascript,我有一个数字数组,通过我的_number函数我创建一个随机数字,如果它已经存在于数组中,我再次调用该函数并创建一个新的随机数字,如果它不在数组中,我通过push发送给它 不幸的是,在浏览器崩溃之前,总是反复发送所有号码 我怎样才能解决这个问题 谢谢你的帮助 var数=[1,2,3,4,5]; 函数mainformation(){ 函数my_number(){ var randomNumber=Math.floor((Math.random()*7)+1); 对于(设i=0;i我不确定您到底想做
var数=[1,2,3,4,5];
函数mainformation(){
函数my_number(){
var randomNumber=Math.floor((Math.random()*7)+1);
对于(设i=0;i我不确定您到底想做什么,但我弄乱了您的代码。请尝试此代码,看看它是否是您预期的输出。(这可能是错误的,tbh。抱歉。)
var数=[1,2,3,4,5];
函数mainformation(){
函数my_number(){
var randomNumber=Math.floor((Math.random()*7)+1);
for(让我输入数字){
if(数字[i]==随机数){
返回;
}否则{
数字。推送(随机数字);
}
}
}
我的号码();
}
main函数();
控制台日志(编号);
在my\u number
函数中,您已经在for循环中再次调用了my\u number
,需要调用my\u number
函数,得到for循环的结果
因此,需要通过for loop
获得randomNumber
是否存在的结果,并基于此,您需要决定是否再次调用该函数
首选方式
const number=[1,2,3,4,5];
函数mainformation(){
函数my_number(){
常量随机数=数学楼层((数学随机数()*7)+1);
const isExisted=number.some((项)=>item==randomNumber);
如果(存在){
我的号码();
}否则{
数字。推送(随机数字);
}
}
我的号码();
}
main函数();
console.log(数字);
代码中有很多问题
- 正如Pointy指出的,
i
应该是numbers[i]
,以比较数组元素而不是索引
- 在另一个函数中有一个函数定义,这很好,但是外部函数所做的唯一事情就是调用内部函数,因此它是多余的
numbers.push(randomNumber)
应该在for循环之外执行,因为它只会检查randomNumber
是否匹配第一个元素,而忽略其余元素
- 在for循环中调用
my_number
后,需要一个return
语句来防止检测到故障后循环继续
var数=[1,2,3,4,5];
函数my_number(){
var randomNumber=Math.floor((Math.random()*7)+1);
for(设i=0;i console.log(数字);
此问题应包括更多详细信息并澄清问题。根据给定的详细信息,请检查以下答案
// I have numbers array
var numbers = [1, 2, 3, 4, 5];
function mainFunction() {
// through my_number function
function my_number() {
// I create a random numer
var randomNumber = Math.floor((Math.random() * 7) + 1);
var isExists = numbers.includes(randomNumber);
// if it already exist in the array
if (isExists) {
// I call the function again
my_number();
} else { // if it is not in the array
// I send it to it through push
numbers.push(randomNumber);
}
}
my_number();
}
mainFunction();
console.log(numbers);
每次你把另一个数字推到数组上,numbers.length
都会改变。哦,你也在比较i
,而不是numbers[i]
。我已经为numbers[i]改变了i,我在控制台中得到了这个结果:最大调用堆栈大小exceeded@JP您可以使用number.includes(randomNumber)
。includes()
方法确定数组的条目中是否包含某个值,并根据需要返回true
或false
。检查重复项并不是免费的。而且,您希望从给定的一组数字中获得大多数数字。这意味着,您前进的越远,可能生成的重复项越多,并且您的进度会变慢。这里更好的方法是生成一个包含所有可能值的列表,将其洗牌,然后从洗牌后的列表中获取前n个值。