Вместо получения, например, первых 5 ключей от объекта с 10 ключами:
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)
}
}
Но мне было интересно, есть ли более простое и элегантное решение.
Чтобы получить поистине истинную (псевдо) случайную сортировку, используйте что-то вроде случайной сортировки на месте.
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]).sort(() => Math.random() - 0.5).slice(0, 5);