javascript - 一次单击遍历数组
问题描述
我正在学习基本的 JavaScript 并构建一个小型酒店应用程序来练习。尝试一次单击一次遍历数组时遇到了问题。意思是……我想在鼠标单击时进行并遍历数组中的一个索引。基本上可以通过单击鼠标一次显示一家酒店的信息。我写了一些实际有效的代码,但我认为必须有更好的方法来做到这一点。我想知道什么是更有效的方法。
我的 HTML
<body>
<div class="background">
<div class="cover">
<div class="space"></div>
<div id="button">
<h1>Check Availablility</h1>
</div>
<div class="name-div">
<h1 id="name"></h1>
</div>
<div class="rooms-div">
<h1 id="rooms"></h1>
<h3>rooms left</h3>
</div>
</div>
</div>
<script src="script.js"></script>
</body>
我的 JavaScript
function Hotel(name, rooms, booked) {
this.name = name;
this.rooms = rooms;
this.booked = booked;
this.checkAvailability = function () {
return this.rooms - this.booked;
}
};
var quay = new Hotel('Quay', 40, 25);
var park = new Hotel('Park', 100, 33);
var dream = new Hotel('Dream', 77, 40);
var cod = new Hotel('Cod', 49, 21);
var hotels = [quay, park, dream, cod];
const button = document.getElementById('button');
const name = document.getElementById('name');
const rooms = document.getElementById('rooms');
var i = 0;
button.addEventListener('click', function () {
if (i < hotels.length) {
name.textContent = hotels[i].name;
rooms.textContent = hotels[i].checkAvailability();
i++;
if (i == hotels.length) {
i = 0;
}
}
});
任何见解都会很棒。谢谢!
解决方案
我可能大部分时间都使用你的方法,但很高兴知道自 ECMAScript 2015 以来我们可以在这种情况下使用生成器函数。一个基本的例子可能是:
function* idMaker() {
var index = 0;
while (index < index+1)
yield index++;
}
var gen = idMaker();
console.log(gen.next().value); // 0
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
console.log(gen.next().value); // 3
在您的实现中可能是这样的:
function* doSomethingOnClick(length){
var index = 0;
while(index < length){
name.textContent = hotels[index].name;
rooms.textContent = hotels[index].checkAvailability();
yield index++;
if(index==length){
index = 0;
}
}
}
var gen = doSomethingOnClick(hotels.length);
button.addEventListener('click', function () {
gen.next();
})
这里有一个完整的例子https://jsfiddle.net/uh7n329s/9/
推荐阅读
- r - 如何使用 tidyverse 重塑复杂的选举数据?
- routes - 基于 JWT 颁发者声明的 API 网关(Azure、AWS)流量路由
- entity-framework - 获得 EF 和 SSMS 之间的极端执行时间差异
- mysql - SQL:在 MySQL/MariaDB 中使用窗口函数选择某些行
- javascript - 在 google-sheets 中将工作表名称变量作为我在 copyTo 中的新范围引用?
- python - Matplotlib.pyplot - 如何将直方图保存在变量中以供以后访问?
- python - Discord.py 赠品命令
- angular - 尝试使用 ReactiveFormsModule 创建登录表单时出现两个 TypeError
- r - 如何让 R 使用过去两个月创建数据框
- javascript - 使用 Postgres 和 HTML 更新我通过 Express 中的表单获得的数据