【发布时间】:2021-07-11 06:14:03
【问题描述】:
所以,我正在编写一个函数,通过比较分钟差来获取给定数组中最接近的今天日期。我有这个代码:
const getSelectedDate = () => {
const today = moment(new Date()).format('YYYY-MM-DD');
const dates = data.data;
let minDiff = null;
let closestDate = dates[0].startDate;
dates.map((item) => {
const diff = Math.abs(moment(today).diff(moment(item.startDate).format('YYYY-MM-DD'), 'minutes', true));
console.log('Diff: ' + diff + ' for date: ' + item.startDate + ' with minDiff: ' + minDiff);
if(!minDiff || diff < minDiff) {
minDiff = diff;
closestDate = item.startDate;
}
});
return closestDate;
}
问题在于,它将从 16-04-2021 返回最接近的日期为 13-04-2021,而不是 16-04-2021 索引。
示例输出:
Diff: 5760 for date: 2021-04-12T16:00:00 with minDiff: null
Diff: 0 for date: 2021-04-16T16:00:00 with minDiff: 5760
Diff: 4320 for date: 2021-04-13T16:00:00 with minDiff: 0
Diff: 17280 for date: 2021-04-28T16:00:00 with minDiff: 4320
2021-04-13T16:00:00
比较时0如何定义?
【问题讨论】:
-
提示:不要使用
map进行迭代,使用forEach。 -
我不确定您在哪里得出关于“小于 0 的大正数”的结论。拥有
minDiff == 0这意味着!minDiff是真的,你在这里有点破坏了自己。也许你的意思是minDiff != null || ... -
您可能只想对数组进行排序(例如,lodash 中的
_.sortBy(dates, 'startDate'))并选择第一个或最后一个条目,而不是所有这些杂乱无章的东西。 -
提示:在这种情况下你可以使用reduce,这样你就不需要定义let closeDate
标签: javascript reactjs react-native momentjs