массив состоящий из рандомных элементов(чисел), каждый элемент это число от 0 до 8
Как сделать функцию которая возвращает массив состоящий из трех элементов, каждый элемент это рандомное число от 0 до 8 и что-бы эти три элемента(числа) не повторялись между собой.
Например:
let arr = [3,1,8]
let arr = [7,4,6]
let arr = [5,0,2]
и т.д.
Ответы (4 шт):
Автор решения: Алексей Шиманский
→ Ссылка
- Заполнить массив значениями от 0 до 8
- Перемешать
- Орезать первые последние 6 значений (чтобы в массиве осталось три)
- PROFIT
Автор решения: Alexander Lonberg
→ Ссылка
Вырезать из массива рандомно по одному элементу.
function getA3(){
const a = [...Array(9).keys()]
const b = Array(3)
let count = 3
while(--count >= 0) { b[count] = a.splice(Math.floor(Math.random() * a.length), 1)[0] }
return b
}
console.log(JSON.stringify(getA3()));
console.log(JSON.stringify(getA3()));
console.log(JSON.stringify(getA3()));
Оставить рандомно 3 элемента
function getA3(){
const a = [...Array(9).keys()]
let count = 6
while(--count >= 0) { a.splice(Math.floor(Math.random() * a.length), 1) }
return a
}
console.log(JSON.stringify(getA3()));
console.log(JSON.stringify(getA3()));
console.log(JSON.stringify(getA3()));
Автор решения: Roma
→ Ссылка
Решил так:
function myArr(num){
let newArr = Array(num).fill().map((e, i) => i + 1)
for (let i = newArr.length - 1; i > 0; i--) {
let j = Math.floor(Math.random() * (i + 1));
[newArr[i], newArr[j]] = [newArr[j], newArr[i]];
}
return newArr.splice(0, 3)
}
console.log(myArr(8));
Автор решения: Stanislav Volodarskiy
→ Ссылка
Вариант Фишера-Йейтса:
const sample = (n, k) => {
const a = [...Array(n).keys()];
for (let i = 0; i < k; ++i) {
const j = i + Math.floor(Math.random() * (n - i)); // random in [i, n)
[a[i], a[j]] = [a[j], a[i]]; // swap a[i], a[j]
}
return a.slice(0, k);
};
for (let k = 0; k < 10; ++k) {
console.log(sample(9, 3).join(' '));
}