2017-10-18 29 views
0

我有以下效用函數:JS函數來產生唯一的隨機數

var Utilities = (function (array, maxN) { 

    function generateRandomNumber(array, maxN) { 
     let randomN = Math.floor(Math.random() * (maxN - 0) + 0); 

     if(array.length == maxN) { 
      array = []; 
     } 

     if(!array.includes(randomN)) { 
      array.push(randomN); 
     } 
     else { 
      randomN = generateRandomNumber(array, maxN); 
     } 
     return randomN; 
    } 

    return { 
     generateRandomNumber: generateRandomNumber 
    }; 

})(); 

export default Utilities; 

我使用像這樣其中:

function getRandomNumber() { 
    var array = []; 
    let randomN = Utilities.generateRandomNumber(array, 5); 
    return randomN; 
} 

然後我使用該函數內的反應組分,像這樣:

... 

    getNewQuestion =() => { 
     var randomN = getRandomNumber(); 
     console.log(randomN); 
     this.setState({ 
      question: this.state.data.data.questions[randomN] 
     }) 
     this.setCatBgColor(this.state.data.data.questions[randomN].category); 
    } 

... 

我剛纔做了一個試驗,我得到:

0,0,3

這是錯誤的,因爲它們應該是唯一的,直到達到5的長度(在這種情況下)。

+0

' - 0','+ 0' ... ?! – deceze

+0

@deceze Nah,所有的零都是正數 – Bergi

+1

@Bergi我應該在這裏使用更多的單詞:*那些在你的代碼中執行的' - 0'和'+ 0'是什麼......?看起來很多餘。* – deceze

回答

0

你的功能

function getRandomNumber() { 
    var array = []; 
    let randomN = Utilities.generateRandomNumber(array, 5); 
    return randomN; 
} 

確實造成在每次調用一個新的空array,不記任何事。 generateRandomNumber將不知道以前的調用。將變量聲明和初始化放在函數之外:

var array = []; 
function getRandomNumber() { 
    return Utilities.generateRandomNumber(array, 5); 
}