Доброй ночи!
Есть функция, которая срабатывает при onchange селектора.
Внутри нее есть цикл, который выводит свойство объекта из рандомного элемента массива, который выбран в селекторе.
Необходимо реализовать таким образом, чтобы цикл вывел свойства всех элементов массива в рандомном порядке, не повторяясь дважды.
Пытаюсь реализовать таким образом:
После каждого вывода свойства, цикл добавляет новое свойство "checked" в объект, тем самым если свойство из данного объекта уже показывалось, то у данного объекта есть свойство checked.
Также сделал проверку в цикле на наличие свойства "checked".
Сейчас результат кода может быть таким:
1
4
Фильмов больше нет
3
2
Фильмов больше нет
То есть else из цикла может сработать, не смотря на то, что еще остаются объекты без свойства checked.
Нужно сделать так, чтобы else срабатывал только в том случае, когда больше не осталось объектов без свойства checked.
Желаемый результат работы кода:
1
3
2
4
Фильмов больше нет
Надеюсь, меня кто-нибудь поймет и подскажет, заранее спасибо!
let getSelector = document.querySelector("#zhanr")
let getFilmTitle = document.querySelector(".film-title")
let getFilmBox = document.querySelector(".film-box")
let getRandomFilm
let checkRandomCount
let allFilms = [
{value:1, films:[
{title: '1'},
{title: '2'},
{title: '3'},
{title: '4'}
]},
{value:2, films:[
{title: '5'},
{title: '6'},
{title: '7'},
{title: '8'}
]}
]
function randomInteger(min, max) {
let rand = min + Math.random() * (max + 1 - min);
return Math.floor(rand);
}
let getZhanr = function() {
getRandomFilm = randomInteger(0, 3)
let getSelectedZhanr = getSelector.value
let i
if (getFilmBox.classList.contains("hide")) getFilmBox.classList.remove("hide")
for(i=0; i < allFilms.length; i++){
if ((allFilms[i].value == getSelectedZhanr) && (allFilms[i].films[getRandomFilm].hasOwnProperty('checked') == false)) {
getFilmTitle.innerHTML = allFilms[i].films[getRandomFilm].title
console.log(allFilms[i].films[getRandomFilm].title)
checkRandomCount = getRandomFilm
allFilms[i].films[getRandomFilm]['checked'] = 'yes'
break
}
else {
getFilmTitle.innerHTML = "Фильмов больше нет"
console.log("Фильмов больше нет")
}
}
}