javascript - 数组元素之间的过滤

标签 javascript arrays node.js

我有一个日期数组:

const dates = ['date1', 'date2', 'date3', 'date4', 'date5'];

还有一个函数,它获取两个值,如果两个日期在同一周,则返回 true

function isSameWeek(a,b){
// some code
 return true or false;
}

我想过滤dates数组,使其所有值都不在同一周(每周一个)。

例如,如果 isSameWeek('date1', 'date2')=true ,则过滤后的数组应为 filtered=['date1', 'date3', 'date4', '日期5']

感谢您的帮助:)

最佳答案

如果日期已排序,则只需一次即可完成:

// monkey patching here for example sake (ignore this)
Date.prototype.getWeekNumber = function() {
  var d = new Date(Date.UTC(this.getFullYear(), this.getMonth(), this.getDate()));
  var dayNum = d.getUTCDay() || 7;
  d.setUTCDate(d.getUTCDate() + 4 - dayNum);
  var yearStart = new Date(Date.UTC(d.getUTCFullYear(),0,1));
  return Math.ceil((((d - yearStart) / 86400000) + 1)/7);
}

const isSameWeek = (a, b) => a.getWeekNumber() == b.getWeekNumber();

function getWeeklyDates(dates)
{
  // can remove the sort() if already sorted
  dates.sort((a, b) => a - b)
  // filter out in a single pass
  return dates.filter((date, index) => {
    return index > 0 ? !isSameWeek(date, dates[index - 1]) : true; // not in the same week
  });
}

const dates = [
  new Date('2020-01-01'),
  new Date('2020-02-01'),
  new Date('2020-01-03'),
  new Date('2020-03-05'),
  new Date('2020-03-03')
];

console.log(getWeeklyDates(dates));

关于javascript - 数组元素之间的过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60727620/

相关文章:

javascript - 如何在 dimple.js 中显示完整的 xAxis 标题?

javascript - Masonry 可以用作 RTL(从右到左)方向吗

javascript - Jquery 对话框打不开?

java - 如何在 Java 中对齐表格

javascript - React this.props 不更新

node.js - nodemon中的选项 '-r'是什么?

javascript - 在 Bluebird Promise 中使用一个函数的结果调用另一个函数

javascript - javascript闭包是否为每次迭代在内存中创建一个新的保留空间?

c# - 究竟如何使用 array.where?

javascript - 这是通过 websocket 解析传入 JSON 并根据消息类型进行响应的正确方法吗?