Javascript 如何在用户按下刷新按钮时限制洗牌

Javascript 如何在用户按下刷新按钮时限制洗牌,javascript,arrays,shuffle,Javascript,Arrays,Shuffle,当用户按下按钮并获得第一次洗牌时,如果有进一步的洗牌尝试,我希望再次显示第一个结果 例如: 第一次洗牌[42,37,11,2]; 进一步洗牌:[42、37、11、2]如果用户按下刷新按钮,我想再次显示相同的第一次洗牌结果9 <script> var arr = [2, 11, 37, 42]; arr = shuffle(arr); console.log(arr); function shuffle(array) { var curre

当用户按下按钮并获得第一次洗牌时,如果有进一步的洗牌尝试,我希望再次显示第一个结果

例如: 第一次洗牌[42,37,11,2]; 进一步洗牌:[42、37、11、2]如果用户按下刷新按钮,我想再次显示相同的第一次洗牌结果9

<script>
    var arr = [2, 11, 37, 42];
    arr = shuffle(arr);
    console.log(arr);

    function shuffle(array) {
      var currentIndex = array.length, temporaryValue, randomIndex;

      // While there remain elements to shuffle...
      while (0 !== currentIndex) {
        // Pick a remaining element...
        randomIndex = Math.floor(Math.random() * currentIndex);
        currentIndex -= 1;
        // And swap it with the current element.
        temporaryValue = array[currentIndex];
        array[currentIndex] = array[randomIndex];
        array[randomIndex] = temporaryValue;
      }        
      return array;
    }
</script>
将结果放入会话存储中;加载时,仅当无法从sessionStorage获取时才进行随机播放。比如:

var arr, arrJSON;
arrJSON = sessionStorage.getItem('shuffledArray');
if (arrJSON) {
  arr = JSON.parse(arrJSON);
} else {
  arr = shuffle([2, 11, 37, 42)];
  sessionStorage.setItem('shuffledArray', JSON.stringify(arr));
}

我会做一个叫做记忆的变体。在这种情况下,我们只想确保只对洗牌进行一次评估。所以我们第一次洗牌,然后存储结果缓存。下次调用它时,它将简单地返回缓存

只要您不将此例程应用于另一个函数,它就可以正常工作,因为它只保存一个缓存值。有一些方法可以使这种方法更通用,您可以从以下几点开始阅读这种方法:

函数memoizefunc{ var缓存; 返回函数{ ifcache{ 返回缓存; } 否则{ var val=func.applythis,参数; cache=val; 返回val; } }; } var shuffle=memoizefunction数组{ var currentIndex=array.length,temporaryValue,randomIndex; //虽然还有一些元素需要洗牌。。。 而0!==currentIndex{ //选择剩余的元素。。。 randomIndex=Math.floorMath.random*currentIndex; currentIndex-=1; //并将其与当前元素交换。 临时值=数组[currentIndex]; 数组[currentIndex]=数组[randomIndex]; 数组[randomIndex]=临时值; } 返回数组; }; var-arr=[2,11,37,42]; arr=洗牌耳环; console.logarr; arr=洗牌耳环; console.logarr; arr=洗牌耳环; console.logarr;