Как выбрать несколько случайных неповторяющихся элементов?

Здравствуйте. Задача в следующем: Есть список. По клику на элемент списка нужно вывести три случайных элемента этого списка: а) чтобы элемент по которому кликнули - не выводился, б) чтобы один и тот же элемент не выводился многократно и c) если в списке всего три элемента - все три и выводятся.

Помогите, пожалуйста, всю голову сломал. Пока получилось Вот что. Выводятся три рандомных элемента и не выводится тот, на котором сработал клик. Правда и то, не всегда правильно - иногда выводится вообще один элемент вместо трех. Ну и не могу придумать, как избежать повторения индексов.
  • Вопрос задан
  • 586 просмотров
Решения вопроса 3
evgeniy8705
@evgeniy8705
Повелитель вселенной
0xD34F
@0xD34F Куратор тега JavaScript
Так:

$('#a').on('click', 'li', function() {
  const li = $(this).siblings().clone().get();
  $('#b').html([...Array(3)].map(() => li.splice(Math.random() * li.length | 0, 1)[0]));
});

??
Ответ написан
@Ridz
добавил в вариант 0xD34F если в списке всего три элемента - все три и выводятся.
и убрал лишний массив
$(function() {
function getRandomElems($el) {
    $("#b").html("");
    var $li = $el.siblings();
    $li.length < 3 && ($li = $li.add($el));
    $li = $li.get();
    for (var i = 0; i < 3; i++) {
        var rand = (Math.random() * $li.length) | 0;
        $($li.splice(rand,1)).clone().appendTo($("#b"));
    }
}

$("#a").on('click', 'li', function() {
    getRandomElems($(this));
});
});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
06 мая 2024, в 09:38
1200 руб./в час
06 мая 2024, в 09:37
1200 руб./в час
06 мая 2024, в 09:36
8000 руб./за проект