我有以下函數可以從數組中抽出一個隨機索引而不重複索引,並保持拉出它們直到所有的索引都被使用,然後重置自身並開始重新使用他們。它也嘗試,以確保最後一個拉出的是不一樣的復位拉出來的下一個,所以你永遠不會有相同的索引連續出來。退出函數並再次調用本身而不返回undefined
var listIndexes = [];
var lastIndex;
function getRandomIndex(indexes)
{
if (!listIndexes.length) {
for (var i = 0; i < indexes; i++) {
listIndexes.push(i);
}
}
var randomIndex = Math.floor(Math.random() * listIndexes.length);
var uniqueIndex = listIndexes[randomIndex];
listIndexes.splice(randomIndex, 1);
if(lastIndex && uniqueIndex == lastIndex)
{
listIndexes = [];
getRandomIndex(indexes);
return;
}
lastIndex = uniqueIndex;
return uniqueIndex;
}
var index = getRandomIndex(5);
console.log(index);
但是當它擊中代碼:if(lastIndex && uniqueIndex == lastIndex)
這導致它的索引返回undefined。所以我試圖退出函數並重新調用函數以重試的方式不能按計劃運行。
如何退出當前函數調用並重新調用該函數以獲取與lastIndex
不相同的新隨機索引。請注意,lastIndex
保持不變,直到新索引不一樣,無論該函數被調用多少次。
可以只用一個號碼這項工作?因爲我不想傳遞它實際的數組只是數字,所以在你的例子中,我只是想通過它'RandEleGenerator(3);' – Cameron
@Cameron你已經有了代碼來構造數組[1 (var i = 0; i
Neil
你能告訴我一個我怎麼做的例子,因爲我沒有遵循你的意思。乾杯朋友。 – Cameron