我制作了一个数组对象和一个随机选择的函数。我想在一个静态函数中获取(从随机函数中选择的随机对象)及其本身的长度。我也想获得相同的所选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)
}
答案 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);