【问题标题】:Fact Generator (Not Random)事实生成器(非随机)
【发布时间】:2018-02-22 17:07:21
【问题描述】:

我正在向我公司的关于页面添加一个随机事实生成器。目前看起来是这样的:

var targetemployee = document.getElementById('targetemployee');
    var factsemployee = [

      'Fact1',
      'Fact2',
      'Fact3',
      'Fact4',
      'Fact5',
    ];
    function newEmployeeFact () {
      var i = Math.floor(Math.random() * factsemployee.length) | 0;
      targetemployee.innerText = factsemployee[i]

    }
    
    newEmployeeFact();
    <div style="text-align: center;">

    <p class="funfact" id="targetemployee"></p><button type="button" class="hover-shadow" style="text-align: middle; font-size: 0.8em; bottom: 0px" onclick="newEmployeeFact()"> NEW FACT </button>

    </div>

我的问题是,点击几次后,它有时会显示相同的事实而不是新的事实,所以我只想更改它以使其具有顺序性。有小费吗?我是 JS 初学者,感谢大家的帮助!

【问题讨论】:

  • 如果选择是随机的,可能会出现两次相同的事实。只需从已删除最后一个事实的列表中获取随机事实即可。
  • @MEE 不同的“随机性”来源会发生什么变化?
  • @Andreas 没什么,但我认为 JS(或任何其他编程语言)只是使用“假”随机数可能值得注意。我已经编辑了我的评论。
  • 你试过改组这些值吗?

标签: javascript function random


【解决方案1】:

这样的事情怎么样?

var targetemployee = document.getElementById('targetemployee');

var factsOrig = [
    'Fact1',
    'Fact2',
    'Fact3',
    'Fact4',
    'Fact5',
  ];

var factsemployee = factsOrig.slice(0);

function newEmployeeFact () {
    if (!factsemployee.length) {
        factsemployee = factsOrig.slice(0); // Refill array
    }
    var i = Math.floor(Math.random() * factsemployee.length) | 0;
    targetemployee.innerText = factsemployee[i]
    factsemployee.splice(i, 1); // Remove from active array
}

newEmployeeFact();
<div style="text-align: center;">

<p class="funfact" id="targetemployee"></p><button type="button" class="hover-shadow" style="text-align: middle; font-size: 0.8em; bottom: 0px" onclick="newEmployeeFact()"> NEW FACT </button>

</div>

【讨论】:

    猜你喜欢
    • 2011-07-03
    • 2010-12-04
    • 2011-11-24
    • 2019-08-03
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    相关资源
    最近更新 更多