【问题标题】:Javascript for loop check condition循环检查条件的Javascript
【发布时间】:2019-08-30 20:58:41
【问题描述】:

我想创建一个函数,该函数将生成一个不在数组中的 0 到 9 之间的随机数。

到目前为止我的代码:

 var myArr = [0,2,3,4];

  console.log("Arr: " + myArr);


  function newNum(){
     console.log("test");

     for (var i = 0; i < 10; i++) {
       var n = myArr.includes(i)
       // I want to return n if it's not present in the array
     }
     return n;
  }

newNum()

我只想返回 1 个号码。我该怎么做?

谢谢。

【问题讨论】:

  • @karthick 但是如何检查数组中是否存在数字?我想生成一个不在数组中的数字。
  • 是的,抱歉没有正确阅读问题
  • 好吧includes返回布尔值,所以你需要做类似if(!myArr.includes(i)) return i的事情,这就是for循环中你所需要的,如果它在外面,0-9之间没有可能的num

标签: javascript arrays loops for-loop iteration


【解决方案1】:

这个怎么样?

const invalidValues = [0,2,3,4];

const getRandomInt = (min, max) => {
    min = Math.ceil(min);
    max = Math.floor(max);
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

const getValidRandomInt = (min, max) => {
  while(true) {
    let temp = getRandomInt(min,max)
      if(!invalidValues.includes(temp)) {
        return temp;
      }
  }
}

console.log(getValidRandomInt(0,10))

【讨论】:

  • 如果分布仅从 0 -9 生成随机数的一种非常昂贵的方法?
【解决方案2】:
var myArr = [0,2,3,4];
  function newNum(){
     for (var i = 0; i < 10; i++) {
       if (!myArr.includes(i)) {
            return i;
       }
     }
     // return -1 if all numbers present in array..
     return -1;
  }

newNum();

【讨论】:

  • 这似乎只是部分解决方案,因为它没有显示如何生成 0 到 9 之间的随机数
【解决方案3】:

使用Math.random()生成范围内的数字,然后循环检查生成的数字是否在数组中,如果不在数组中则返回数字:

function getRandomArbitrary(min, max, arr) {
  arr = new Set(arr);
  while(true){
      let val =  Math.floor(Math.random() * (max - min) + min);
      if(!arr.has(val)){ return val;}
    }
}
console.log(getRandomArbitrary(0, 10, [4,3,2]));

【讨论】:

    【解决方案4】:

    答案:

    使用Math.random() * (max - min) + min 获取范围内的数字。

    您可以使用 Math.floor 将其包装起来以向下舍入为整数,或者对较小的数字使用按位或 (|)。

    function newNum(n_arr) {
     let r = () => Math.random()*9 | 0,
     n = r();
     while(n_arr.includes(n)) {
       n = r();
     }
     return n;
    }
    

    示例:

    var myArr = [0,2,3,4];
    
      function newNum(n_arr){
         let r = () => Math.random()*9 | 0,
         n = r();
         while(n_arr.includes(n)) {
           n = r();
         }
         return n;
      }
    
    let result =  newNum(myArr);
    console.log(result);

    【讨论】:

      【解决方案5】:
      var myArr= [0,2,5];
      function randomNumber(myArr, n){
          n ? n : 1;
          var num = Math.random() * n;
          if(myArr.indexOf( num ) !==-1 ) {
              return randomNumber( myArr, n );
          }
          return num;
      }
      randomNumber(myArr, 10);
      

      【讨论】:

        【解决方案6】:

        如果你想返回数组中缺少的第一个数字,从上面的代码中,你可以检查 i 的每个值是否存在于数组中,并且当该值不存在时,返回它。

         var myArr = [0,2,3,4]; // original array
        
          function newNum(){
        
             for (var i = 0; i < 10; i++) { // loop through i from 0-9
        
               if (myArr.indexOf(i) === -1){ // check for the first missing number
                return i; //return it
               }
             }
          }
        
        newNum()
        
        

        【讨论】:

          猜你喜欢
          • 2010-12-16
          • 2017-04-03
          • 2021-08-09
          • 2013-06-24
          • 1970-01-01
          • 2014-09-12
          • 2011-03-31
          • 1970-01-01
          • 2019-11-23
          相关资源
          最近更新 更多