需要帮助正在构建返回最早日期值的方法
P粉521013123
P粉521013123 2024-04-04 19:51:19
0
1
1511

我正在为我接管的遗留代码库重构一个方法。 该方法接受预测日期的对象。 当预测日期在 30、40 或 60 以内时,应使用 getTime() 方法进行转换,返回最早的时间。

当前返回它接收的对象的最早日期,问题是它只与 2 个日期进行比较,它返回星形日期,并且仅返回结束日期中的 2 个值之一,而不是比较所有 3 个和返回最低的 .getTime() 值

下面是返回最早日期的方法

const getEarliestRunout = (runout_dates = {}, dm1_type = '') => {
     try{
        const cur_year = new Date().getFullYear();

        const non_priority_sticker = dm1_type == cur_year + 1 || dm1_type == cur_year ? 'dm1' : 'dm2';
    
        return Object.entries(runout_dates).reduce((earliest,obj) => {            
            const key = obj[0].split('_')[0];

            const value = obj[1];
            
            if(value[`under_${env.STICKER_THRESH[0]}`] && key != non_priority_sticker) {
                return new Date(value[`under_${env.STICKER_THRESH[0]}`]).getTime() < earliest.val ? {val: new Date(value[`under_${env.STICKER_THRESH[0]}`]).getTime(), date: value[`under_${env.STICKER_THRESH[0]}`]} : {...earliest}
            }
            return earliest
        },{val: Infinity, date:''})
    }catch(e){
        console.error(`ERROR :: util.getEarliestRunout: ${e} - ${new Date()}`);
        return {val: Infinity, date: ''}
    }
}

下面是用于调用正在使用的方法的变量

const earliest_runout = getEarliestRunout({
 dm1_runouts: value.dm1_type == priority_sticker ? priorityRunouts : nonPriorityRunouts,
 dm2_runouts: value.dm2_type == priority_sticker ? priorityRunouts : nonPriorityRunouts,
 star_runouts: starRunouts
},value.dm1_type);

我期望该方法能够比较所有日期,但它只比较 2。我很确定这就是我调用该方法的方式,但我不确定。我正在寻求进一步解决这个问题,因为我对如何获得我正在寻找的结果感到困惑。

我确信我可以将其改写得更清楚,但只是重申一下。此方法接受日期值(在我的用例中只有 3 个日期)并使用 Math.min 和 getTime() 返回最早的日期。我收到的结果是它返回所有日期值,但仅将星号值与 dm1_runout 或 dm2_runout 中的一个进行比较。它在比较中保持一致,仅返回其中之一,但不会同时返回两者。

P粉521013123
P粉521013123

全部回复(1)
P粉949267121

我解决了我的问题的答案。我创建了一个日期数组,通过 Math.min 方法运行每个方法,并将每个值推入日期数组,然后对数组进行排序,以使用空字符串过滤 NaN,并仅返回 Math.min 中与每个循环匹配的最小值通过每个对象的数组。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板