Случайный тестовый выбор JS

#javascript #arrays #random

#javascript #массивы #Случайный

Вопрос:

Я работаю над рандомизацией отзывов / testomonials на веб-сайте, над которым я работаю. Я использую JS для рандомизации testomonials, которые находятся на странице индекса при загрузке. В моем коде я использую массив для хранения testomonials, а затем, когда страница загружается, я хочу, чтобы она просто случайным образом выбирала 3 отзыва из массива и записывала их в «отзыв-1», «отзыв-2» и «отзыв-3» соответственно.

Проблема, с которой я сталкиваюсь в своем коде, заключается в том, что idk — лучший способ выбрать 3 разных отзыва, не повторяя один и тот же дважды.

  var reviews = [
    "Thank you Anne for fitting me in yesterday when you realised I was desperate to get the house cleaned before the blinds and curtains were fitted. Marie and Michaela did a great job, leaving it sparkling clean. I will certainly recommend you to anyone who needs a cleaner. That you are so approachable, helpful and friendly is a bonus. - <strong>Rosemary OBoyle</strong>",
    "Great job on all the awkward hate to do Jobs! Came home from my holidays and my house was sparkling, highly recommended!! - <strong>Lynne Gardiner</strong>",
    "Domestic Angels are angels to me, just left lovely Kelly cleaning my house in preparation for mums arrival, while I chill at hairdressers, thank you to Anne amp; her team, can't recommend them enough - <strong>Julie Magee</strong>"
]

var max = reviews.length;
var id1;
var id2;
var id3;

function getRandomReview(max) {
    id1 = Math.floor(Math.random() * Math.floor(max));
    id2 = Math.floor(Math.random() * Math.Floor(max));
    id3 = Math.floor(Math.random() * Math.Floor(max));
}

function randomJS() {
    getRandomReview(max);
    document.getElementById("review-1").innerHTML = id1;
    document.getElementById("review-2").innerHTML = id2;
    document.getElementById("review-3").innerHTML = id3;
}
  

Будем признательны за любые советы и помощь. Заранее спасибо

Комментарии:

1. вы можете перетасовать свой массив, а затем использовать порядок, полученный из перетасованного массива, в качестве порядка отображения отзывов

2. Возможно ли, что у вас будет более 3 отзывов?

Ответ №1:

Спасибо!

Просто перетасовал его, и он работает! 🙂

 var reviews = [
    "Thank you Anne for fitting me in yesterday when you realised I was desperate to get the house cleaned before the blinds and curtains were fitted. Marie and Michaela did a great job, leaving it sparkling clean. I will certainly recommend you to anyone who needs a cleaner. That you are so approachable, helpful and friendly is a bonus. - <strong>Rosemary OBoyle</strong>",
    "Great job on all the awkward hate to do Jobs! Came home from my holidays and my house was sparkling, highly recommended!! - <strong>Lynne Gardiner</strong>",
    "Domestic Angels are angels to me, just left lovely Kelly cleaning my house in preparation for mums arrival, while I chill at hairdressers, thank you to Anne amp; her team, can't recommend them enough - <strong>Julie Magee</strong>",
]

var max = reviews.length;
var id1;
var id2;
var id3;

function shuffle(reviews) {
    reviews.sort(() => Math.random() - 0.5);
}

function randomJS() {
    shuffle(reviews);
    document.getElementById("review-1").innerHTML = reviews[0];
    document.getElementById("review-2").innerHTML = reviews[1];
    document.getElementById("review-3").innerHTML = reviews[2];
}
  

Комментарии:

1. Просто предупреждение, что метод shuffle, как известно, не очень случайный. Если вам нужно больше случайности, взгляните на алгоритм случайной перетасовки Фишера-Йейтса для получения хорошего алгоритма случайной перетасовки.