随机排列的对象无法正常工作

时间:2019-01-13 10:07:10

标签: javascript arrays object async-await

对象的随机排列无法正常工作

我尝试了在这里找到的所有各种随机播放方法。如果我在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();
})

2 个答案:

答案 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