javascript - Javascript / Moment - 按对象值分组数组
问题描述
我想在 36 小时内创建一个包含天数和时间的二维数组。
我想要得到的输出是:
Wed 18th
00:00am
01:00am
02:00am
03:00am
...
22:00pm
23:00pm
Thur 19th
00:00am
01:00am
02:00am
03:00am
...
...直到我们达到 36 小时。我想为表单创建select
一个optgroup
。
基本上是当天的时间范围和第二天的时间范围给予或接受。
到目前为止,我有这个:
const start = moment().startOf('day');
const times = [];
let hours = 36 * 60;
for (let i = 0; i < hours; i += 1) {
const value = moment(start).add(60 * i, 'minutes');
const time = {
value: value.format('HH:mm A'),
label: value.format('ddd, Do, HH:mm A'),
day: value.format('ddd, Do'),
};
times.push(time);
}
这给了我一系列日期和时间。
我试图按天值分组以实现上述输出,但无法实现。
这就是我到目前为止所拥有的——虽然它已经坏了。
let daysTimes = [];
times.forEach((time) => {
daysTimes.push(time.day);
});
daysTimes = _.uniq(daysTimes);
times.forEach((time) => {
if (daysTimes[time.day] === time.day) {
daysTimes[time.day].push(time);
}
});
console.log(daysTimes);
我的daysTimes
阵列只有两天。没有时间。
我正在使用momentjs
图书馆。
解决方案
不使用平面数组,而是使用带有 day 的对象作为键和值的数组。然后迭代该对象以构建<select>
const start = moment().startOf('day');
const groups = {};// change to object
let hours = 36;
for (let i = 0; i < hours; i += 1) {
const value = moment(start).add(60 * i, 'minutes');
// get day for object key
const day = value.format('MMM D');
// add day property if it doesn't exist
groups[day] = groups[day] || [];
const time = {
value: value.format('HH:mm A'),
label: value.format('ddd, Do, HH:mm A'),
day: value.format('ddd, Do'),
};
// push hour object to day array
groups[day].push(time);
}
Object.entries(groups).forEach(day => {
const optGroup = document.createElement('optgroup')
optGroup.label = day[0];
day[1].forEach(h => {
optGroup.appendChild(new Option(h.label, h.value))
})
document.getElementById('sel').appendChild(optGroup)
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
<select id="sel"><option></option></select>
推荐阅读
- html - 定义自定义无效反馈类
- api - API - 您的 AccountSid 或 AuthToken 不正确
- reactjs - 升级的 React - 懒惰的“ctor 不是函数”
- selenium - 系统无法检测到指定的文件和 Win32 错误
- android - Flutter/Dart 文本输入重定向在第二页而不是登录页面
- javascript - 您如何将拖放列表的代码与 Javascript 中的表单条目输入结合起来?
- macos - 如何解决macOS中VSCode中的includePath错误
- node.js - 如何在节点中打开具有独占文件访问权限的文件?
- python - DataFrame 的真值是模棱两可的。在 Jupyter 中使用 a.empty、a.bool()、a.item()、a.any() 或 a.all() 错误
- html - 使用“将文件另存为...”时,阻止 Chrome 将我的相对链接转换为绝对链接