javascript - 12 小时制,每小时 3 个时隙
问题描述
我正在尝试从用户的两个输入starts-at
和duration
.
基本上,这个对象将显示一个 12 小时制的时钟。每小时有三个时段,每个时段 20 分钟。
如果他们100
从持续时间中选择分钟,对象应该看起来像
{
"1": [20, 40, 60],
"2": [20, 40]
}
而当前的输出是
{
"1": 40,
"2": 40
}
请指教。
$(".btn-calculate").click(function () {
var startsAt = Number($(".starts-at").val());
var duration = Number($(".duration").val());
var hours = Math.floor(duration / 60) + startsAt;
var minutes = duration % 60;
var occupiedSlots = {};
while (hours >= 1) {
occupiedSlots[hours] = minutes;
--hours;
}
$("textarea").val(JSON.stringify(occupiedSlots, undefined, 4));
});
body {
font-family: monospace;
}
select,
button {
padding: 10px 20px;
}
textarea {
width: 100%;
min-height: 400px;
margin-top: 20px;
}
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
Starts At
<select class="starts-at">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
<option>11</option>
<option>12</option>
</select>
Duration
<select class="duration">
<option>20</option>
<option>40</option>
<option>60</option>
<option>80</option>
<option>100</option>
<option>120</option>
<option>140</option>
<option>160</option>
<option>180</option>
<option>200</option>
<option>220</option>
<option>240</option>
</select>
<button class="btn-calculate">Calculate</button>
<textarea readonly></textarea>
解决方案
您已经非常接近正确的解决方案了。您必须为每个新小时创建一个数组并将分钟推送到数组中,而不是设置值:
$(".btn-calculate").click(function () {
const startsAt = Number($(".starts-at").val());
const duration = Number($(".duration").val());
const occupiedSlots = {};
for (let time = 20; time <= duration; time += 20) {
const hour = (Math.floor((time - 20) / 60) + startsAt - 1) % 12 + 1;
if (!(hour in occupiedSlots)) occupiedSlots[hour] = [];
occupiedSlots[hour].push((time - 20) % 60 + 20);
}
$("textarea").val(JSON.stringify(occupiedSlots, undefined, 4));
});
body {
font-family: monospace;
}
select,
button {
padding: 10px 20px;
}
textarea {
width: 100%;
min-height: 400px;
margin-top: 20px;
}
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
Starts At
<select class="starts-at">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
<option>11</option>
<option>12</option>
</select>
Duration
<select class="duration">
<option>20</option>
<option>40</option>
<option>60</option>
<option>80</option>
<option>100</option>
<option>120</option>
<option>140</option>
<option>160</option>
<option>180</option>
<option>200</option>
<option>220</option>
<option>240</option>
</select>
<button class="btn-calculate">Calculate</button>
<textarea readonly></textarea>
推荐阅读
- r - 如何在 xlab 中为 ggplot 添加两个连续的下标?
- java - 如何从通用对象中获取值
- sql - 左连接不获取所有记录
- python - 填充直方图数组的有效方法
- mongodb - 继续收到我的 mongoexport 的 json 格式错误
- apache - Htaccess 重定向 (www.example.com/page.html/page.html) 未重定向到 404 页面
- three.js - 有没有办法直接在threejs中绘制模型/纹理?
- javascript - 未捕获的错误:WCT 在 web-components-tester 中需要 Mocha 错误
- zend-framework - 如何在 Zend_Select 中使用 IN 函数
- java - java.io.ioexception 写入失败的 ebadf(错误的文件描述符)