Je suis en train de refactoriser une méthode pour une base de code héritée que j'ai reprise. Cette méthode accepte un objet de dates prédites. Lorsque la date de prévision est comprise dans 30, 40 ou 60 jours, la méthode getTime() doit être utilisée pour effectuer la conversion, en renvoyant l'heure la plus ancienne.
Renvoie actuellement la date la plus ancienne de l'objet qu'il reçoit, le problème est qu'il ne compare qu'avec 2 dates, il renvoie une date étoilée et ne renvoie qu'1 des 2 valeurs à partir de la date de fin au lieu de comparer les 3 et de renvoyer la la plus basse La valeur .getTime()
Voici comment renvoyer la date la plus ancienne
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: ''} } }
Vous trouverez ci-dessous les variables utilisées pour appeler la méthode utilisée
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);
Je m'attendais à ce que cette méthode compare toutes les dates, mais elle n'en compare que 2. Je suis presque sûr que c'est ainsi que j'appelle la méthode, mais je n'en suis pas sûr. Je cherche à résoudre ce problème davantage car je ne sais pas comment obtenir les résultats que je recherche.
Je suis sûr que je peux reformuler cela plus clairement, mais juste pour réitérer. Cette méthode accepte les valeurs de date (seulement 3 dates dans mon cas d'utilisation) et renvoie la date la plus ancienne en utilisant Math.min et getTime(). Le résultat que je reçois est qu'il renvoie toutes les valeurs de date mais compare uniquement la valeur astérisque à l'une des valeurs dm1_runout ou dm2_runout. Il reste cohérent d’une comparaison à l’autre, renvoyant uniquement l’un ou l’autre, mais pas les deux.
J'ai résolu la réponse à mon problème. J'ai créé un tableau de dates, exécuté chaque méthode via la méthode Math.min et poussé chaque valeur dans le tableau de dates, puis trié le tableau pour filtrer les NaN avec la chaîne vide et renvoyer uniquement les valeurs dans Math.min. le tableau de chaque objet correspondant à la valeur minimale.