javascript - 如何检查一个值是否存在于 JavaScript 数组中,继续添加 0.15 直到它不存在,然后将该值添加到数组的末尾?
问题描述
我有许多文本输入元素,其中包含人员轮班的开始时间(例如 9:00、9:30、10:00 等)。
我的代码将一个一个地遍历这些元素并将它们推送到一个数组中。如果该值已经存在于数组中,我需要在时间上加上 15 分钟(0.15),然后再次检查它是否存在。这将一直持续到该值不存在,然后将其推送到数组中。
例如:约翰 - 9:00 比尔 - 9:00 朱莉 - 9:30 山姆 - 9:30 托尼 - 9:30
次 = []
第一次是9:00,不是时间,所以会加。时间现在等于 [9]。下一个是 9:00,它确实存在,所以我添加 0.15,给我 9.15,它不存在,所以现在 times = [9, 9.15]。这对所有元素都继续。如果小数点等于 0.60,那么我需要将 1 添加到小时,所以对于 Tony,添加的时间将是 10。
我知道我可以只使用 if 语句检查一次,但是我如何继续添加 15 并继续检查 2、3、4+ 次?
if( times.contains(value)) {
times.push(value + 0.15)
}
为此,我需要大量的 if 语句。如何反复检查,然后在添加后立即结束循环?
解决方案
您可以取 aSet
并递增该值,直到它不在集合中,然后映射该值。
此方法使用 15 分钟的十进制值,即一刻钟0.25
。
var times = [9, 9, 9.5, 9.5, 9.5],
adjusted = times.map((s => t => {
while (s.has(t)) {
t += 0.25;
}
s.add(t);
return t;
})(new Set));
console.log(adjusted);
推荐阅读
- c# - 有重定向时是否可以显示或跟踪 URL?
- django - 在 wagtail 中,我如何设置 v2 api 以将完整的基本 URL(例如 http://localhost:8000" )附加到蒸汽场图像和富文本嵌入?
- powershell - 识别当前活动窗口,向另一个窗口发送击键并返回到当前活动窗口
- android - 无法在 Android Studio 中构建项目
- javascript - e.preventDefault() 不允许我提交表单
- r - 如何使用 R 仅在散点图 3d 图中更改点颜色?
- intellij-idea - IntelliJ 中 ant 的导入问题
- java - java.lang.NoSuchMethodError: cucumber.runtime.Runtime
- react-native - 在注册时使用 withAuthenticator 放大获取用户属性
- typescript - 派生类中扩展构造函数参数的正确 TypeScript 类型