求问一个js中的循环

var a = new Array()
    function wa(){
        !function ya(){
        var randnum = Math.round(10*Math.random())    
        console.log(randnum)
        if(randnum in a ){
            return ya()
        }else{
        a.push(randnum)
        }
    }()
        
        console.log(a)
    }
    发现问题了,数字是否在数组里面不能用in来判断,改用indexOF就正常了,不过还是想问问大神们有没有最优的做法啊

给一个a空数组,从1-10取随机数,取到的随机数,如果随机数已经存在在a数组里就返回重新取,如果不存在就加进数组

但是在控制台看是这样的
图片描述

求大神解惑啊!

阅读 2.2k
4 个回答

你这里不应该用in运算符,你这里这个random指的是数组的下标,而不是值,这里应该换成数组的indexOf方法

if判断的问题,if(randnum in a)中判断的是是否存在数组索引,而不是数组里面的值,应该用indexof进行判断

楼上说的没错 你的in运算符的地方写错了 下标 in 数组 意思是判断当前下标在数组中有没有值 假设你的数组是[4,5] 1 in [4,5]是true 但是2 in [4,5]就是false了 因为你的数组下标2的地方并没有具体指 上面那个问题如果你是用jq的话 可以尝试$.inArray方法

你这逻辑看着有点绕,可以简单一点

let arr = [];
while(arr.length < 10) {
    let item = Math.ceil(10*Math.random())
    arr.includes(item) ? '' : arr.push(item);
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题