Массив объектов Shuffle не работает должным образом
Я пробовал все виды методов случайного воспроизведения, которые я нашел здесь. Если я запускаю их на js.fiddle, все работает нормально, но, поскольку я использую его в своем коде, он больше не перемешивается. Там нет сообщения об ошибке или что-нибудь. Это просто ничего не делает. Я прочитал все темы здесь о перетасовке объектов, но я не нашел ничего, что решает эту проблему.
Я использую API из https://randomuser.me/ для получения случайных пользователей. Они хранятся в массиве объектов, которые я хочу перемешать, а затем визуализировать в пользовательском интерфейсе. У меня есть класс генератора для извлечения данных, и я храню все в объекте состояния.
Мне интересно, может быть, это что-то связано с асинхронной функцией, потому что все это довольно ново для меня.
export const shuffle = (array) => {
let currentIndex = array.length;
let temporaryValue;
let randomIndex;
const newArray = array.slice();
// While there remains elements to shuffle...
while (currentIndex) {
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
// Swap it with the current element.
temporaryValue = newArray[currentIndex];
newArray[currentIndex] = newArray[randomIndex];
newArray[randomIndex] = temporaryValue;
}
return newArray;
};
А вот другой код, где я также вызываю функцию shuffle
/* Global state of the app
*/
const state = {};
const startGame = async() => {
// 1) New Generator and add to state
state.generator = new Generator();
// 2) Prepare UI for Rendering
renderer.clearContent();
// 3) Call API for new User
await state.generator.generateUser();
// 4) Render user to UI
renderer.renderResults(state.generator.user);
// 5) Start a timer
$("#CountDownTimer").TimeCircles().start();
// When Timer hits 0 -------------->
$("#CountDownTimer").TimeCircles().addListener(function(unit, value, total) {
if (total < 0) {
//1) Clear HTML Content and Stop Timer
elements.playGround.innerHTML = "";
$("#CountDownTimer").TimeCircles().stop();
//2) shuffle Person Object
shuffle.shuffle(state.generator.user);
console.log(state.generator.user)
//3) Display Image
}
});
}
timer.displayTimer();
elements.startButton.addEventListener('click', element => {
element.preventDefault();
startGame();
})