我有一个日期数组:
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/