Heim  >  Fragen und Antworten  >  Hauptteil

Benötigen Sie Hilfe beim Erstellen einer Methode, die den frühesten Datumswert zurückgibt?

Ich überarbeite eine Methode für eine alte Codebasis, die ich übernommen habe. Diese Methode akzeptiert ein Objekt mit vorhergesagten Daten. Wenn das Prognosedatum innerhalb von 30, 40 oder 60 Tagen liegt, sollte zur Konvertierung die Methode getTime() verwendet werden, die den frühesten Zeitpunkt zurückgibt.

Gibt derzeit das früheste Datum des empfangenen Objekts zurück. Das Problem besteht darin, dass es nur mit 2 Daten verglichen wird, ein Sterndatum zurückgibt und nur 1 der 2 Werte vom Enddatum zurückgibt, anstatt alle 3 zu vergleichen und das zurückzugeben niedrigster .getTime()-Wert

So geben Sie das früheste Datum zurück

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: ''}
    }
}

Unten sind die Variablen aufgeführt, die zum Aufrufen der verwendeten Methode verwendet werden

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);

Ich habe erwartet, dass diese Methode alle Daten vergleicht, aber sie vergleicht nur 2. Ich bin mir ziemlich sicher, dass ich die Methode so aufrufe, bin mir aber nicht sicher. Ich versuche, dieses Problem weiter zu lösen, da ich nicht weiß, wie ich die gewünschten Ergebnisse erzielen kann.

Ich kann das sicher noch deutlicher formulieren, aber nur zur Wiederholung. Diese Methode akzeptiert Datumswerte (in meinem Anwendungsfall nur 3 Datumsangaben) und gibt mithilfe von Math.min und getTime() das früheste Datum zurück. Das Ergebnis, das ich erhalte, ist, dass alle Datumswerte zurückgegeben werden, der Sternchenwert jedoch nur mit einem von dm1_runout oder dm2_runout verglichen wird. Es bleibt bei allen Vergleichen konsistent und gibt nur das eine oder das andere zurück, aber nicht beide.

P粉521013123P粉521013123179 Tage vor1361

Antworte allen(1)Ich werde antworten

  • P粉949267121

    P粉9492671212024-04-05 00:13:51

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

    Antwort
    0
  • StornierenAntwort