Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.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 - Fatal编程技术网

Javascript 如何从对象中获取随机键数组,而不是完整列表?

Javascript 如何从对象中获取随机键数组,而不是完整列表?,javascript,Javascript,例如,不是从具有10个关键点的对象中获取前5个关键点: var keys = Object.keys(brain.layers[this.layer]).slice(0, 5); 我想随机得到5把钥匙。我知道一些笨重、冗长、迂回的方法,比如: function getRandomNumber(n1, n2) { ... } var list = []; var count = 0; function choose(arr, count, list, max) { for (let pro

例如,不是从具有10个关键点的对象中获取前5个关键点:

var keys = Object.keys(brain.layers[this.layer]).slice(0, 5);
我想随机得到5把钥匙。我知道一些笨重、冗长、迂回的方法,比如:

function getRandomNumber(n1, n2) { ... }
var list = [];
var count = 0;

function choose(arr, count, list, max) {
  for (let prop in arr) {
    var choice = Math.round(getRandomNumber(0, 1));
    if (choice === 1 && count < max && !list.includes(arr[prop])) {
      list.push(arr[prop]);
      count++;
    }
  }
  if (count >= max) {
    return list;
  } else {
    choose(arr, count, list, max)
  }
}
函数getRandomNumber(n1,n2){…} var列表=[]; var计数=0; 函数选择(arr、计数、列表、最大值){ 用于(让道具进入arr){ var choice=Math.round(getRandomNumber(0,1)); 如果(选项===1&&count=最大值){ 退货清单; }否则{ 选择(arr、计数、列表、最大值) } } 但我想知道是否有更简单、更优雅的解决方案

要获得真正的(伪)随机排序,请使用类似就地随机排序的方法

let arrRand=(a,i=a.length)=>{while(i){a.push(a.splice(Math.random()*i--|0,1)[0])}}
let keys = Object.keys(brain.layers[this.layer])
randSort(keys)
keys=keys.slice(0,5)
这需要一个数组和数组长度,但如果它是现代浏览器,则可以使用默认参数。警告:它会修改传入的数组。

要获得真正的(伪)随机排序,请使用类似就地随机排序的方法

let arrRand=(a,i=a.length)=>{while(i){a.push(a.splice(Math.random()*i--|0,1)[0])}}
let keys = Object.keys(brain.layers[this.layer])
randSort(keys)
keys=keys.slice(0,5)

这需要一个数组和数组长度,但如果它是现代浏览器,则可以使用默认参数。警告:它会修改传入的数组。

var-keys=Object.keys(brain.layers[this.layer])。排序(()=>Math.random()-0.5)。切片(0,5)
@JaromandaX虽然-
var keys=Object.keys(brain.layers[this.layer]).sort(()=>Math.floor(Math.random()*3)-1.slice(0,5)似乎“更”随机
var keys=Object.keys(brain.layers[this.layer]).sort(()=>Math.random()-0.5)。slice(0,5)
@JaromandaX虽然-
var keys=Object.keys(brain.layers[this.layer]).sort(()=>Math.floor(Math.random()*3)-1.slice(0,5)似乎“更”随机