javascript - 如何将数组中的随机元素添加到另一个空白数组?
问题描述
我想用 javascript 创建一个简单的餐厅菜单。首先,菜单将显示 5 道菜(存储在数组“menu”中)。然后,当我单击“订购”按钮时,阵列“菜单”中的随机菜肴将在“订购”行中一一显示,同时我不断单击它。为此,我生成了 0-4 的随机数,并创建了第二个空白数组“订单”并创建 DOM 对象以在 HTML 行中一一写入“订单”数组的元素。代码如下
const menu = ["Steak", "Potato", "Hamburger", "Salad", "Cheesecake"];
let show_menu = document.querySelector("#menu");
let show_orders = document.querySelector("#orders");
for (let i = 0; i <= menu.length; i++) {
if (menu[i] != undefined) {
show_menu.textContent += ` ${menu[i]}`;
}
}
function chuumon() {
let orders = [];
let a = Math.floor(Math.random() * 5);
document.querySelector("#num").textContent = a;
orders.push(menu[a]);
show_orders.textContent = orders[a];
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>restaurant order</title>
</head>
<body>
<h4>Menu</h4>
<span id="menu"></span>
<hr> Orders:
<span id="orders"></span><br>
<span id="num"></span>
<button onclick="chuumon()">Order</button>
</body>
</html>
问题是当我点击“订单”行中的“订单”按钮时,它只显示element[0]
数组,menu
否则它什么也不显示。
我的push()
方法有什么问题?( orders.push(menu[a])
)
现在我想设置一个事件,当点击“上菜”按钮时,“订单”行中的菜将被一一删除。因此,我设置了另一个函数“Teikyo()”来使用function_name.shift()方法,但努力访问函数“chuumon()”中的“Order”数组值。这是我关于这两个函数的代码。谁能建议我如何访问其他函数的属性?
function chuumon() {
let a = Math.floor(Math.random() * 5);
show_orders.textContent = menu.join(",");
orders.push(menu[a]);
show_orders.textContent = orders;
last_order.textContent = orders[orders.length - 1]
}
function teikyo()
{
chuumon().orders.shift();
show_orders.textContent = orders;
}
解决方案
正确推送数组并没有错orders.push(menu[a])
,但是,您实际上并不需要orders.push(menu[a])
它,因为每次调用该函数时都在启动它。
你可以简单地做:
function chuumon() {
let a = Math.floor(Math.random() * 5);
document.querySelector("#num").textContent = a;
show_orders.textContent = menu[a];
}
const menu = ["Steak", "Potato", "Hamburger", "Salad", "Cheesecake"];
let show_menu = document.querySelector("#menu");
let show_orders = document.querySelector("#orders");
for (let i = 0; i <= menu.length; i++) {
if (menu[i] != undefined) {
show_menu.textContent += ` ${menu[i]}`;
}
}
function chuumon() {
let a = Math.floor(Math.random() * 5);
document.querySelector("#num").textContent = a;
show_orders.textContent = menu[a];
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>restaurant order</title>
</head>
<body>
<h4>Menu</h4>
<span id="menu"></span>
<hr> Orders:
<span id="orders"></span><br>
<span id="num"></span>
<button onclick="chuumon()">Order</button>
</body>
</html>
或者,如果您想在该数组上推送某些内容并进行跟踪,则需要在函数之外声明它。
const menu = ["Steak", "Potato", "Hamburger", "Salad", "Cheesecake"];
let orders = [];
let show_menu = document.querySelector("#menu");
let show_orders = document.querySelector("#orders");
let show_order = document.querySelector("#order");
for (let i = 0; i <= menu.length; i++) {
if (menu[i] != undefined) {
show_menu.textContent += ` ${menu[i]}`;
}
}
function chuumon() {
let a = Math.floor(Math.random() * 5);
document.querySelector("#num").textContent = a;
show_orders.textContent = menu[a];
orders.push(menu[a]);
show_orders.textContent = orders;
show_order.textContent = orders[orders.length - 1]
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>restaurant order</title>
</head>
<body>
<h4>Menu</h4>
<span id="menu"></span>
<hr> Orders:
<span id="orders"></span><br>
<span id="num"></span>
<hr> Last Order:
<span id="order"></span><br>
<button onclick="chuumon()">Order</button>
</body>
</html>