Давайте теперь реализуем функцию randoms
,
возвращающую заданное количество случайных
элементов из массива. Пусть первым параметром
функция принимает массив, а вторым - количество
элементов, которое следует вернуть.
Для решения задачи можно использовать функцию
random
, созданную нами в предыдущих
уроках, вот так:
function randoms(arr, length) {
let result = [];
for (let i = 0; i < length; i++) {
result.push( random(arr) ); // используем функцию random
}
return result;
}
console.log( randoms([1, 2, 3, 4, 5], 3) );
Это, однако, плохое решение, так как один и тот же элемент массива может быть получен несколько раз. Следует полагать, что это не то, что мы ожидаем от нашей функции.
Давайте лучше перемешаем наш массив с помощью
ранее созданной нами функции shuffle
,
а потом возьмем первые length
элементов
перемешенного массива.
Для решения описанной задачи было бы неплохо
иметь следующую функцию first
, получающую
первые элементы массива:
function first(arr, length) {
// код мы напишем позже
}
console.log( first([1, 2, 3, 4, 5], 3) ); // выведет [1, 2, 3]
При наличии такой функции first
мы
сможем решить поставленную задачу следующим
образом:
function randoms(arr, length) {
return first(shuffle(arr), length);
}
console.log( randoms([1, 2, 3, 4, 5], 3) );
Реализуем теперь функцию first
:
function first(arr, length) {
return arr.slice(0, length);
}
Обязательно потестируем созданную функцию:
console.log( first([1, 2, 3, 4, 5], 3) ); // выведет [1, 2, 3]
Соберем весь код вместе (с кодом функции shuffle) и получим итоговое решение нашей задачи:
function randoms(arr, length) {
return first(shuffle(arr), length);
}
function first(arr, length) {
return arr.slice(0, length);
}
function shuffle(arr) {
let result = [];
while (arr.length > 0) {
let random = getRandomInt(0, arr.length - 1);
let elem = arr.splice(random, 1)[0];
result.push(elem);
}
return result;
}
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
Обязательно потестируем созданную функцию
randoms
(каждый запуск приведенного
ниже кода должен выдавать 3
случайных
неповторяющихся элемента):
console.log( randoms([1, 2, 3, 4, 5], 3) );
Самостоятельно, не подсматривая в мой код,
реализуйте описанную функцию. При решении
задачи код функций getRandomInt
и
shuffle
скопируйте из учебника.