对象的随机排列无法正常工作
我尝试了在这里找到的所有各种随机播放方法。如果我在js.fiddle上运行它们,则一切正常,但是由于我在代码中使用了它,因此不再混乱。没有错误信息或其他任何信息。它什么也没做。我已经阅读了有关改组对象的所有线程,但没有发现任何可解决此问题的方法。
我使用https://randomuser.me/中的API来获取随机用户。那些存储在我要洗牌然后呈现到UI的对象数组中。我有一个生成器类来获取数据,并将所有内容存储在状态对象中。 我想知道这是否与异步功能有关,因为所有这些对我来说都是很新的。
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();
})
答案 0 :(得分:0)
请注意,您的shuffle
函数将返回 new 数组,但是在shuffle.shuffle(state.generator.user);
处调用它时,您不会将返回值分配为空...
尝试类似的东西:
state.generator.user = shuffle.shuffle(state.generator.user);
答案 1 :(得分:0)
您的shuffle方法是不可变的,调用时不使用它的返回值。
删除此行:const newArray = array.slice();
并将newArray
替换为array