在JS中產生不重複的隨機數可以使用多種技術來實現。最初,該方法是透過將新產生的數字新增至陣列並與其進行比較來檢查是否已建立新產生的數字。但是,由於過多的遞歸調用,這可能會導致“超出最大調用堆疊大小”錯誤。
一個有效的解決方案是產生一次隨機數字列表,然後按順序處理它。這種方法消除了遞歸呼叫的需要,並保證不重複。
這是一個使用 Fisher–Yates Shuffle 的範例:
function shuffle(array) {
var i = array.length,
j = 0,
temp;
while (i--) {
j = Math.floor(Math.random() * (i 1));
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
return array;
}
var ranNums = shuffle([1,2,3,4,5,6,7,8,9,10]);
或者,生成器也可用於此目的:
function* shuffle(array) {
var i = array.length;
while (i--) {
yield array.splice(Math.floor(Math.random() * (i 1)), 1)[0];
}
}
var ranNums = shuffle([1,2,3,4,5,6,7,8,9,10]);
ranNums.next().value; // first random number from array
ranNums.next().value; // second random number from array
...
這些技術提供了在 JavaScript 中產生不重複隨機數的有效方法,消除了與過度遞歸呼叫相關的問題。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3