JavaScript日期数组处理:将重复日期替换为false的实现方法
处理重复日期数组的实用方案
刚好做过类似的需求,给你两种简单高效的实现方式,都能完美达到你想要的效果:
方法一:用对象跟踪已出现日期
这是最直观的实现思路,用一个普通对象记录每个日期是否已经出现过:
const dates = ["2018-04-25", "2018-04-25", "2018-04-26", "2018-04-27", "2018-04-28", "2018-04-28"]; const seenDates = {}; const processedDates = dates.map(date => { // 如果当前日期已经被记录过,返回false if (seenDates[date]) { return false; } // 第一次遇到该日期,标记为已出现,返回原日期 seenDates[date] = true; return date; }); console.log(processedDates); // 输出结果:["2018-04-25", false, "2018-04-26", "2018-04-27", "2018-04-28", false]
方法二:用ES6 Set实现(更简洁)
如果习惯ES6语法,用Set来存储已出现的日期会更优雅,逻辑和上面完全一致:
const dates = ["2018-04-25", "2018-04-25", "2018-04-26", "2018-04-27", "2018-04-28", "2018-04-28"]; const seenSet = new Set(); const processedDates = dates.map(date => { if (seenSet.has(date)) { return false; } seenSet.add(date); return date; });
关键说明
- 两种方法的时间复杂度都是O(n),只需要遍历数组一次,效率很高
- 逻辑都是保留第一次出现的日期,把后续重复的替换为
false,完全匹配你的需求 - 如果你的数组里可能存在非字符串类型的日期(比如Date对象),只需要把判断条件改成对应的比较逻辑即可
内容的提问来源于stack exchange,提问作者udarts
相关产品推荐
相关产品推荐

