【问题标题】:Why is a large positive number smaller than 0?为什么一个大的正数小于0?
【发布时间】: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


【解决方案1】:
if(!minDiff || diff < minDiff) {

所以如果 minDiff 是

   minDiff = diff;

然后用新的区别代替


您可能想测试minDiff === null,而不是测试它的非真实性。

【讨论】:

  • 明白了!将 if 语句更改为 if(minDiff === null || diff
【解决方案2】:

问题在于您没有设置 minDiff 测试:

    if(!minDiff || diff < minDiff && minDiff !== 0) {...

如果 minDiff 的值为 0,则测试的第一部分 !minDiff 将返回 true

您应该严格测试 null:

    if(minDiff === null || diff < minDiff) {...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 2017-01-03
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多