如何选择随机对象以及如何同时选择随机对象的长度

时间:2019-01-13 15:51:23

标签: javascript

我制作了一个数组对象和一个随机选择的函数。我想在一个静态函数中获取(从随机函数中选择的随机对象)及其本身的长度。我也想获得相同的所选object.length。

我像数组对象一样做了返回

what i expect
17 or 22 or etc
17 or 22 or etc 

无论如何我总是想要相同的号码。

var roastAboutUglyLvl1 = {
  rt1: "ugly very poor roast",
  rt2: "ugly poor roast",
  rt3: "ugly medium roast",
  rt4: "ugly strong roast",
  rt5: "ugly very strong roast"
}

function randomRoast(obj){
      var keys = Object.keys(obj);
        return {
          roast: obj[keys[ keys.length * Math.random() << 0]],
          thelength:obj[keys[ keys.length * Math.random() << 0]].length,
          check:function(){
            if(this.roast.length == this.thelength){
              return this.thelength;
            }else{
              return "didn't match";
            }
          }
        }
    };


var func = randomRoast(roastAboutUglyLvl1); 
while(func.check() != "didn't match"){
  var func = randomRoast(roastAboutUglyLvl1); 
  console.log(func.roast.length)
  console.log(func.thelength)
}

2 个答案:

答案 0 :(得分:0)

下一个问题是

roast: obj[keys[ keys.length * Math.random() << 0]]选择一个随机对象

thelength:obj[keys[ keys.length * Math.random() << 0]].length选择另一个随机对象

您要为两个属性选择相同的对象,因此应使用相同的随机数进行选择。

还要避免使用>>生成随机数,这是一种更简单的解决方案。

这是您更新的randomRoast函数:

function randomRoast(obj){
      var keys = Object.keys(obj);
      var randNum = Math.random();
        return {
          roast: obj[keys[ Math.floor(randNum  * keys.length) ]],
          thelength:obj[keys[ Math.floor(randNum  * keys.length) ]].length,
          check:function(){
            if(this.roast.length == this.thelength){
              return this.thelength;
            }else{
              return "didn't match";
            }
          }
        }
    };

答案 1 :(得分:0)

  

无论什么,我总是想要相同的号码

否,您要做的是存储随机生成的数字,键或值,并使用其创建要返回的对象。
不要多次使用Math.random()并尝试对其进行折弯,以使它两次返回相同的现在甚至不紧密随机数。

var roastAboutUglyLvl1 = {
  rt1: "ugly very poor roast",
  rt2: "ugly poor roast",
  rt3: "ugly medium roast",
  rt4: "ugly strong roast",
  rt5: "ugly very strong roast"
}

// get a random item from an Array is a quite common task,
// it's fine to write a reusable function for that.
function sample(array) {
  if (array && array.length) {
    return array[ Math.floor(Math.random() * array.length) ];
  }
  return void 0; //just to be explicit for a beginner
}

function randomRoast(obj) {
  var roast = sample( Object.values(obj) );
  
  return {
    roast: roast,
    thelength: roast.length,
    check: function() {
      if (this.roast.length === this.thelength) {
        return this.thelength;
      } else {
        return "didn't match";
      }
    }
  }
};


var func = randomRoast(roastAboutUglyLvl1);
console.log(func.roast, func.roast.length, func.thelength);