【问题标题】:Get a new random number every day in JS or jquery每天在JS或jquery中获取一个新的随机数
【发布时间】:2017-02-06 14:08:05
【问题描述】:

我正在构建一个每日笑话迷你应用程序并且无法安静地弄清楚如何每天生成一个新的随机数。随机数指向 json 中的一个笑话。我有随机数部分工作,但我只需要它在新的一天随机化,而不是每次浏览器刷新。

这是我目前得到的结果

<script>
            $(document).ready(function () {
                $.getJSON('js/jokes.json', function (data) {
                    var randomJoke = (Math.floor(Math.random() * data.OneLiners.length));
                    var newJoke = randomJoke;
                    var decide = (Math.floor(Math.random() * 2));
                    var jokeofDay = data.OneLiners[newJoke].joke;
                    var riddleofDay = data.Riddles[newJoke].Question;
                    var riddleAnswer = data.Riddles[newJoke].Answer;
                    var riddle = "Question: " + riddleofDay + "<br/> Answer: " + riddleAnswer;
                    if (decide == 0) {
                        document.getElementById("JoD").innerHTML = jokeofDay + " ";
                    } else {
                        document.getElementById("JoD").innerHTML = riddle;
                    }
                });
            });

                if(jQuery) console.log('jQuery is loaded.');
        </script>

【问题讨论】:

  • 您需要随机数每天生成一次并持久化,还是可以在每次页面加载时使用不同的随机数?
  • 数字需要坚持一整天,新的一天生成一个新的就行了

标签: javascript jquery math logic


【解决方案1】:

您最好的选择是将值存储在具有到期时间的 cookie 中。这样,您可以让浏览器来决定笑话 ID 是否已过期。这是一个纯 JS 示例,说明如何做到这一点:

// Will return a joke id between the min and max values. Once the joke ID has 
// been generated for the day, it is persisted in a cookie until midnight.
function getJokeId(minId, maxId) {
  var jokeId = getCookie('joke');

  if (jokeId !== null) {
    return jokeId;
  }

  var expire = new Date();
  expire.setHours(23,59,59,0);

  jokeId = Math.floor(Math.random()*(maxId - minId + 1) + minId);

  document.cookie = 'joke='+jokeId+';expires='+expire.toGMTString()+';path=/';

  return jokeId;
}


// Just a helper function for accessing cookies in JS - could be replaced with 
// jQuery plugin or similar if needed.
function getCookie(name) {
  var value = "; " + document.cookie;
  var parts = value.split("; " + name + "=");

  if (parts.length == 2) {
    console.log('Found joke ID from cookie');
    return parts.pop().split(";").shift();
  }

  console.log('No joke ID found - new one needed');
  return null;
}

getJokeId(0, 5);

这是示例代码的 JS Fiddle:https://jsfiddle.net/edcs/0Lpg9ro6/

【讨论】:

    【解决方案2】:

    如果每个用户都可以获取自己的随机值,但它每天只更改一次,请使用 cookie 或 .localStorage 来记住距离他们上次获得新值的时间。

    否则,您必须实现自己的随机数生成器。内置的 JS 不允许您指定自己的“种子”。

    来自MDN

    实现选择随机数生成算法的初始种子;用户不能选择或重置它。

    【讨论】:

    • 好吧,如果不同的用户得到不同的笑话并不重要,只要这个笑话持续一整天。无论如何,它只会在几台计算机上显示(目前)。它是工作项目的一部分。我的团队正在开发一个应用程序,可以显示天气、时间、股票价格和其他花絮,我想把当天的笑话放在那里,以向支持他的人表示敬意,他每天都在白板上写下日。它最终会被放在树莓派上,并显示在休息室的大显示器上。
    猜你喜欢
    • 1970-01-01
    • 2013-02-11
    • 2021-07-09
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 2023-03-29
    • 2017-03-31
    • 2015-08-10
    相关资源
    最近更新 更多