从Javascript对象中拾取随机属性和值
我刚刚开始学习Javascript,需要一些帮助 我想从我完成的数组中构建一个随机选择器从Javascript对象中拾取随机属性和值,javascript,html,Javascript,Html,我刚刚开始学习Javascript,需要一些帮助 我想从我完成的数组中构建一个随机选择器 var movie = ["star wars", "lotr", "moonlight", "avengers"] function newMovie() { var randomNumber = Math.floor(Math.random() * (movie.length)); document.getElementById("display").innerHTML = "You sho
var movie = ["star wars", "lotr", "moonlight", "avengers"]
function newMovie() {
var randomNumber = Math.floor(Math.random() * (movie.length));
document.getElementById("display").innerHTML = "You should watch " + movie[randomNumber];
}
现在我想增加更多的选项,例如书籍、游戏。。所以我为它创建了一个对象:
var chooseOption = {
watch: ["star wars", "lotr", "moonlight", "avengers"],
read: ["scott pilgrim", "harry potter", "eragon"],
play: ["starbound", "skyrim", "bioshock", "fallout"]
}
我对如何进行有点迷茫-我希望它首先选择一个属性,然后选择所述属性的一个值,所有这些都是随机的。
然后在一个文件中打印出来,您应该+[property]+[value]
我该怎么做?对象是一种方法,还是有更好的选择?因此,首先编写一个接受数组并返回项目的通用拾取函数。我将把这个问题留给你来解决 接下来,您需要使用Object.keys来获得类似['watch','read','play']的数组 然后可以通过该键访问属性来获取内部数组
var items = chooseOption[type];
var item = pick(items);
最后,显示结果
console.log('You should ' + type + ' ' + item);
下面是使用Math.random实现随机性的另一个解决方案:
var chooseOption = {
watch: ["star wars", "lotr", "moonlight", "avengers"],
read: ["scott pilgrim", "harry potter", "eragon"],
play: ["starbound", "skyrim", "bioshock", "fallout"]
}
function getRandom(obj, item){
// 1) select which property to operate on.
var itemArr = obj[item];
// 2) we already know that the key can only be an integer(between 0 and length -1 )
// Math.random() : to generate a random number(between [0-1]).
// Math.round() : to round a number to an integer.
// number % length : to make sure the result would be an integer between 0 and length -1
var index = Math.round((Math.random() * itemArr.length)) % itemArr.length;
return {
property:itemArr,
index: index,
value: itemArr[index],
}
}
console.log(getRandom(chooseOption,'watch'));
console.log(getRandom(chooseOption,'read'));
console.log(getRandom(chooseOption,'play'));
与object.keys和Math.random一起使用
首先使用object.keys.length从对象中选择随机关键点。
然后获取密钥的数组。
然后使用数组长度从数组中拾取随机值
功能新电影{
变量类型=Object.keyschooseOption;
var rn=Math.floorMath.random*types.length;
var t=类型[rn];
var val=chooseOption[types[rn]];
var vn=数学.floorMath.random*val.length;
var v=val[vn]
console.log你应该看+t+“”+v;
}
var chooseOption={
观看:[星球大战,lotr,月光,复仇者],
阅读:[斯科特·朝圣者,哈利·波特,埃拉贡],
播放:[星际,天际,生物冲击,辐射]
}
新电影给你
var options = {
watch: ["star wars", "lotr", "moonlight", "avengers"],
read: ["scott pilgrim", "harry potter", "eragon"],
play: ["starbound", "skyrim", "bioshock", "fallout"]
};
for( i in options){
//i is will be iterating with values "watch","read","play"
t = Math.floor( Math.random()* options[i].length);
//options[i] is to access the value of property eg: options["watch"]
//will return ["star wars", "lotr", "moonlight", "avengers"]
console.log("You should " + i +" "+ options[i][t]);
}
改为使用以下代码登录到其他内容:获取一个介于0和chooseOption.length之间的随机数,然后执行chooseOption.keyrandom number;注意:使用Object.keyschooseOption;不保证返回密钥的顺序。如果顺序很重要,您应该将chooseOption建立在数组而不是对象的基础上。@Lys我认为顺序在这里并不重要,因为关键是随机选择一个属性。我同意,不过我认为最好提及它,正如@Timmster所知,随机索引和随机顺序的两个随机因子之间会有组合。@Lys顺序保证为插入顺序。曾经有一段时间它不在规范中,但是所有流行的引擎都这样做了,所以他们添加了它。我想说的是,这个孩子要求使用拾取功能。。LOLFOR循环不是随机的
var options = {
watch: ["star wars", "lotr", "moonlight", "avengers"],
read: ["scott pilgrim", "harry potter", "eragon"],
play: ["starbound", "skyrim", "bioshock", "fallout"]
};
for( i in options){
//i is will be iterating with values "watch","read","play"
t = Math.floor( Math.random()* options[i].length);
//options[i] is to access the value of property eg: options["watch"]
//will return ["star wars", "lotr", "moonlight", "avengers"]
console.log("You should " + i +" "+ options[i][t]);
}