Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Javascript对象中拾取随机属性和值_Javascript_Html - Fatal编程技术网

从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

我刚刚开始学习Javascript,需要一些帮助

我想从我完成的数组中构建一个随机选择器

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]);
    }