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