cari

Rumah  >  Soal Jawab  >  teks badan

Perlukan bantuan membina kaedah yang mengembalikan nilai tarikh terawal

Saya sedang memfaktorkan semula kaedah untuk pangkalan kod warisan yang saya ambil alih. Kaedah ini menerima objek tarikh ramalan. Apabila tarikh ramalan adalah dalam masa 30, 40 atau 60 hari, kaedah getTime() harus digunakan untuk menukar, mengembalikan masa yang paling awal.

Pada masa ini mengembalikan tarikh terawal objek yang diterima, masalahnya ialah ia hanya membandingkan dengan 2 tarikh, ia mengembalikan tarikh bintang dan hanya mengembalikan 1 daripada 2 nilai dari tarikh tamat dan bukannya membandingkan kesemua 3 dan mengembalikan terendah Nilai .getTime()

Berikut adalah cara untuk mengembalikan tarikh terawal

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

Di bawah adalah pembolehubah yang digunakan untuk memanggil kaedah yang digunakan

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

Saya menjangkakan kaedah ini untuk membandingkan semua tarikh, tetapi ia hanya membandingkan 2. Saya agak pasti ini adalah cara saya memanggil kaedah, tetapi saya tidak pasti. Saya sedang mencari untuk menyelesaikan isu ini dengan lebih lanjut kerana saya keliru tentang cara mendapatkan hasil yang saya cari.

Saya pasti saya boleh mengulangi perkara ini dengan lebih jelas, tetapi hanya untuk mengulangi. Kaedah ini menerima nilai tarikh (hanya 3 tarikh dalam kes penggunaan saya) dan mengembalikan tarikh terawal menggunakan Math.min dan getTime(). Hasil yang saya terima ialah ia mengembalikan semua nilai tarikh tetapi hanya membandingkan nilai asterisk kepada salah satu dm1_runout atau dm2_runout. Ia kekal konsisten merentas perbandingan, hanya mengembalikan satu atau yang lain, tetapi bukan kedua-duanya.

P粉521013123P粉521013123228 hari yang lalu1449

membalas semua(1)saya akan balas

  • P粉949267121

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

    Saya menyelesaikan jawapan kepada masalah saya. Saya mencipta tatasusunan tarikh, menjalankan setiap kaedah melalui kaedah Math.min dan menolak setiap nilai ke dalam tatasusunan tarikh, kemudian mengisih tatasusunan untuk menapis NaN dengan rentetan kosong dan hanya mengembalikan nilai dalam Math.min Loop melalui tatasusunan setiap objek sepadan dengan nilai minimum.

    balas
    0
  • Batalbalas