首页 > 解决方案 > 如何记住 setInterval 中的过去值?

问题描述

我有这个函数可以连续生成两个从 0 到 7 的随机数。这两个数字对应于我的 DOM 中的一个 id。

如何确保下一个间隔不会以与最后一个间隔相同的顺序给出相同的两个数字(换句话说,给出与最后一个间隔相同的 id)?

如果它们是相同的,我如何跳过这个间隔并继续下一个而不等待间隔时间?

function chooserandomtile() {
    
    cycle = setInterval(() => {
        let i_random = Math.floor(Math.random() * 8);  
        let j_random = Math.floor(Math.random() * 8);
        var id = i_random + ',' + j_random;

        var target = document.getElementById(id);
        if (target.classList.contains('target') || target.contains(player)) {
        } else {
            target.classList.add('target');
        }

        console.log(id);
        console.log(document.getElementById(id));
        
    }, interval);

标签: javascript

解决方案


只需声明一个将在您的方法范围之外持续存在的变量,并将其设置为跟踪先前的值。如果您的随机逻辑产生与上次相同的 ID,请重试,直到它为您提供不同的值。

function chooserandomtile() {
    let lastId;
    cycle = setInterval(() => {
        let id;
        do {
            let i_random = Math.floor(Math.random() * 8);  
            let j_random = Math.floor(Math.random() * 8);
            id = i_random + ',' + j_random;
        } while (id === lastId)
        lastId = id;

        var target = document.getElementById(id);
        if (target.classList.contains('target') || target.contains(player)) {
        } else {
            target.classList.add('target');
        }

        console.log(id);
        console.log(document.getElementById(id));
        
    }, interval);

推荐阅读