जब उपयोगकर्ता बटन दबाता है और पहला शफल प्राप्त करता है, तो मैं चाहता हूं कि आगे फेरबदल के प्रयास होने पर पहला परिणाम फिर से दिखाया जाए।

उदाहरण के लिए: पहली बार फेरबदल [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>
0
Narasimha Reddy 6 फरवरी 2017, 04:42

2 जवाब

सबसे बढ़िया उत्तर

मैं संस्मरण कहलाने वाले का एक रूपांतर करूँगा। इस मामले में, हम केवल यह सुनिश्चित करना चाहते हैं कि हम केवल एक बार फेरबदल का मूल्यांकन करें। तो पहली बार हम फेरबदल करते हैं और फिर परिणाम (कैश) संग्रहीत करते हैं। अगली बार इसे कॉल करने पर यह केवल कैश लौटाएगा।

यह तब तक ठीक काम करता है जब तक आप इस रूटीन को किसी अन्य फ़ंक्शन पर लागू नहीं करते हैं क्योंकि इसमें केवल एक कैश्ड मान होगा। इसे और अधिक सामान्य बनाने के तरीके हैं, और आप इस दृष्टिकोण को यह लिंक

function memoize(func) {
  var cache;
  return function() {
    if(cache) {
      return cache;
    }
    else {
      var val = func.apply(this, arguments);
      cache = val;
      return val;
    }
  };
}

var shuffle = memoize(function (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;
});

var arr = [2, 11, 37, 42];
arr = shuffle(arr);
console.log(arr);
arr = shuffle(arr);
console.log(arr);
arr = shuffle(arr);
console.log(arr);
0
rasmeister 6 फरवरी 2017, 05:08

परिणाम को sessionStorage में डालें; जब आप लोड करते हैं, तो केवल तभी फेरबदल करें जब आप इसे 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));
}
1
Amadan 6 फरवरी 2017, 04:46