Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在按随机数选择后从列表中删除项目_Javascript - Fatal编程技术网

Javascript 如何在按随机数选择后从列表中删除项目

Javascript 如何在按随机数选择后从列表中删除项目,javascript,Javascript,所以我正在为计算机科学课程制作一个应用程序,基本上,前提是你在一家比萨饼店工作,你必须选择顾客想要的配料,这些配料是随机选择的。目前,我有一个列表中的浇头,可以用randomNumber()来选择它们,但我不知道如何在选择浇头后删除它,以避免重复 var toppings = ["pepperoni", "mushrooms", "pineapple", "peppers", "sausage&qu

所以我正在为计算机科学课程制作一个应用程序,基本上,前提是你在一家比萨饼店工作,你必须选择顾客想要的配料,这些配料是随机选择的。目前,我有一个列表中的浇头,可以用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");
      }
    }
var-toppings=[“辣味香肠”、“蘑菇”、“菠萝”、“辣椒”、“香肠”、“沙丁鱼”,
“培根”];
函数newCustomer(){
showElement(“customerPic”);
对于(变量i=0;i<3;i++){
浇头[(随机数(0,6))];
log((“我想要”+配料[(随机数(0,6)))+”在我的比萨饼上,
请);
}
}

对我来说,最简单的方法似乎是创建一个新数组,其中包含原始
toppings
数组中的字符串,但按随机顺序-您可以将该数组视为堆栈,并继续弹出随机元素,直到没有剩余。有关更多详细信息,请参见代码注释:

//您的原始数据
var浇头=[
“意大利香肠”,
“蘑菇”,
“菠萝”,
“辣椒”,
“香肠”,
“沙丁鱼”,
“培根”
];
//一个新数组,它包含与“toppings”相同的字符串,但其顺序是随机的
常量shuffledToppings=[…toppings].sort(()=>Math.random()-0.5);
//'pop'是一个Array.prototype函数,它删除并返回数组中的最后一项-这意味着每次调用此函数时,'shuffledToppings'将收缩1
函数newCustomer(){
log(`I'd a pizza with${shuffledToppings.pop()}`);
}
//调用'newCustomer'函数,直到所有字符串都弹出'shuffledToppings'(即<为空)。
while(shuffledToppings.length>0){
新客户();

}
基本上,每次迭代都需要从原始数组中删除一个元素,然后得到一个最大值等于过滤数组大小的随机数

尝试以下代码(显然可以改进,例如复制原始阵列ecc):

函数removeItemOnce(arr,值){
var指数=arr.indexOf(值);
如果(索引>-1){
阵列拼接(索引1);
}
返回arr;
}
函数newCustomer(){
showElement(“customerPic”);
对于(变量i=0;i<3;i++){
设ix=随机数(0,浇头长度);
设v=浇头[ix];
浇头=移除一次(浇头,v)
log(“我想在我的比萨饼上加“+v+”);
}
}

有关阵列项目移除的更多信息:

这就像你玩扑克时不想两次处理同一张牌一样。因此,洗牌牌,并提供顶部的卡。因此,只需
.pop()
一项即可。
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");
  }
}