首页 > 解决方案 > 如何检查一个值是否存在于 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 语句。如何反复检查,然后在添加后立即结束循环?

标签: javascriptarrays

解决方案


您可以取 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);


推荐阅读