Я пытаюсь разобраться, как сделать так, чтобы мой JavaScript показывал случайные посты по определенной метке. Я слышал про функцию Math.random()
, но не совсем понимаю, как ее правильно использовать в моем коде. Вот мой текущий скрипт:
function ОтобразитьПроекты(данные) {
for (let i = 0; i < данные.лента.записи.length; i++) {
let заголовок = данные.лента.записи[i].заголовок.$t;
let миниатюра = данные.лента.записи[i].медиа$миниатюра.url;
let ссылка;
for (let j = 0; j < данные.лента.записи[i].ссылки.length; j++) {
if (данные.лента.записи[i].ссылки[j].rel == 'альтернативная') {
ссылка = данные.лента.записи[i].ссылки[j].href;
break;
}
}
let блокПроекта = '<div class="проект"><a href="' + ссылка + '"><img alt="' + заголовок + '" src="' + миниатюра + '"/><h4>' + заголовок + '</h4></a></div>';
document.write(блокПроекта);
}
}
Как мне изменить этот код, чтобы он показывал посты в случайном порядке? Буду благодарен за помощь!
Попробуй перемешать записи алгоритмом Fisher-Yates. Создай массив индексов, перемешай его с Math.random() и выводи записи по новому порядку. Такой метод гарантирует случайный показ постов. Как думаешь, сработает?
слушай, я тут недавно столкнулся с похожей задачей. в итоге решил просто создать массив из всех постов, а потом перемешивать его через sort() с Math.random(). типа так:
let посты = данные.лента.записи;
посты.sort(() => Math.random() - 0.5);
и потом уже в цикле выводить эти перемешанные посты. получается довольно просто и работает норм. может и тебе подойдет такой вариант? попробуй, если что - пиши, разберемся)
Чувак, а почему бы не использовать метод splice() для рандомного выбора постов? Можно сделать так:
let посты = данные.лента.записи;
let случайныеПосты = [];
while (посты.length > 0) {
let индекс = Math.floor(Math.random() * посты.length);
случайныеПосты.push(посты.splice(индекс, 1)[0]);
}
Потом просто итерируешься по случайныеПосты и выводишь их. Так ты получишь реально случайный порядок без повторений. Проверено на практике, работает как часы!