我正在为我接管的遗留代码库重构一个方法。 该方法接受预测日期的对象。 当预测日期在 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粉9492671212024-04-05 00:13:51
我解决了我的问题的答案。我创建了一个日期数组,通过 Math.min 方法运行每个方法,并将每个值推入日期数组,然后对数组进行排序,以使用空字符串过滤 NaN,并仅返回 Math.min 中与每个循环匹配的最小值通过每个对象的数组。