[英]How to remove items from a list after chosen by randomNumber
所以我正在為計算機科學 class 制作一個應用程序,基本上,前提是你在披薩店工作,你必須 select 客戶想要的配料,這些配料是隨機選擇的。 目前,我有一個列表中的澆頭,它將用 randomNumber() 選擇它們,但我不知道如何在選擇后刪除澆頭,以避免重復。
var toppings = ["pepperoni", "mushrooms", "pineapple", "peppers", "sausage", "sardines",
"bacon"];
function newCustomer() {
showElement("customerPic");
for (var i = 0; i < 3; i++) {
toppings[(randomNumber(0, 6))];
console.log(("I would like " + toppings[(randomNumber(0,6))]) + " on my pizza,
please");
}
}
對我來說,最簡單的方法似乎是創建一個新數組,其中包含原始toppings
數組中的字符串,但按隨機順序 - 您可以將該數組視為堆棧並繼續將隨機元素彈出它直到沒有留下。 有關詳細信息,請參閱代碼注釋:
// Your original data var toppings = [ "pepperoni", "mushrooms", "pineapple", "peppers", "sausage", "sardines", "bacon" ]; // A new array that contains same strings as `toppings`, but their order's randomized const shuffledToppings = [...toppings].sort(() => Math.random() - 0.5); // `pop` is an Array.prototype function that removes the and returns the last item in the array - this means `shuffledToppings` is shrinks by 1 each time this function is called function newCustomer() { console.log(`I'd like a pizza with ${shuffledToppings.pop()}`); } // Call `newCustomer` function until all strings have been popped off `shuffledToppings` (ie< it is empty). while (shuffledToppings.length > 0) { newCustomer(); }
參考: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/pop
基本上,您需要在每次迭代時從原始數組中刪除一個元素,然后獲得一個最大值等於過濾數組大小的隨機數。
試試這段代碼(顯然它可以改進,例如復制原始數組 ecc):
function removeItemOnce(arr, value) {
var index = arr.indexOf(value);
if (index > -1) {
arr.splice(index, 1);
}
return arr;
}
function newCustomer() {
showElement("customerPic");
for (var i = 0; i < 3; i++) {
let ix = randomNumber(0, toppings.length);
let v = toppings[ix];
toppings = removeItemOnce(toppings,v)
console.log("I would like " + v + " on my pizza, please");
}
}
有關刪除數組項的更多信息: 如何從數組中刪除特定項?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.