簡體   English   中英

隨機數選擇后如何從列表中刪除項目

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM