我正在嘗試將一個非常基本的「祕密聖誕老人」生成器作爲我的第一個Javascript項目之一。我已經搜索了幾個小時來解決這個問題,但到目前爲止我沒有找到任何工作。Javascript:從數組中隨機添加項目而不重複
我有需要配對對方的名字的一個數組。我成功地讓他們互相配對,但現在有人可以抽兩次。我將隨機選擇的名字推向另一個數組,但是我找不到一種方法來檢查隨機選擇的名字與已選擇的名字。
var names = ["Sean","Kyle","Emily","Nick","Cotter","Brian","Jeremy","Kimmy","Pat","Johnny"];
var used = [];
var picks = [];
if (names.length % 2 != 0) {
alert("You must have an even number of names. You currently have " + names.length + " names.");
}
for(var i = 0; i < names.length; i++){
var random = Math.floor(Math.random()*names.length)
if(names[random] == names[i]) {
names[random] = names[random++];
picks.push(names[i] + " gets " + names[random]);
used.push(names[random]);
} else {
picks.push(names[i] + " gets " + names[random]);
used.push(names[random]);
}
}
console.log("picked array: ")
for(var k=0; k<picks.length; k++) {
console.log(picks[k]);
}
console.log("used array: " + used);
非常感謝您的幫助。
簡單的解決方案:只要洗牌整個陣列(這絕對避免重複),然後配對起來。 – Bergi
什麼可能更容易是隨機化你的名字數組,然後循環,並以這種方式配對。 – brouxhaha
當我試圖做到這一點時,我遇到的問題是如果有人與自己匹配,試圖重新運行洗牌。我不想重新洗牌整個陣列,所以我不得不爲其他人洗牌而希望避免同樣的問題。 –