Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di Fichico
    Registrato dal
    Nov 2002
    residenza
    Bologna
    Messaggi
    581

    Ordinare oggetto in base a indici di altro array

    Ciao, da un'API mi arrivano informazioni su giorni di apertura, con relativi orari, ma non sono ordinati i giorni secondo quelli di calendario.
    Avrei necessità di ordinarli in base all'ordine naturale dei giorni, pernsavo di iterare un array che li contenga ... qualcuno può aiutarmi con la func?
    Lo scenario è questo (non è sempre detto che orari sia popolato con tutti i giorni):
    codice:
    const orari = { 
       lunedi: "07:30 - 12:30", 
       martedi: "07:30 - 12:30", 
       mercoledi: "07:30 - 12:30", 
       giovedi: "07:00 - 12:30", 
       venerdi: "07:30 - 12:30", 
       sabato: "07:30 - 11:45" 
    };
    
    const giorni = ["lunedi", "martedi", "mercoledi", "giovedi", "venerdi", "sabato", "domenica"];
    
    Grazie :-)

  2. #2
    Utente di HTML.it L'avatar di Fichico
    Registrato dal
    Nov 2002
    residenza
    Bologna
    Messaggi
    581
    Ho trovato una prima risoluzione ... qualche idea per renderla più performante?

    codice:
    const orari = { 
       lunedi: "07:30 - 12:30", 
       venerdi: "07:30 - 12:30", 
       mercoledi: "07:30 - 12:30", 
       giovedi: "07:00 - 12:30", 
       sabato: "07:30 - 11:45" 
    };
    
    oraripunto = [];
        const giorni = ["lunedi", "martedi", "mercoledi", "giovedi", "venerdi", "sabato", "domenica"];
    
    
        for(let item of giorni){
          if (item in orari){
            oraripunto.push({
              giorno: item,
              orario: orari[item]
            });
          }
        }

  3. #3
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Ciao, non mi è chiaro cosa intendi per "performante"; questo termine in questo contesto può avere una certa ambiguità.
    Può essere inteso come "script più rapido nell'esecuzione" quindi performante a livello di prestazioni, oppure "script più stringato" quindi performante a livello di sintassi e stesura del codice. Le due cose sono spesso divergenti. Parlerei piuttosto di "ottimizzazione" per arrivare ad un buon compromesso tra questi due fattori.

    La soluzione che hai trovato mi pare tuttavia abbastanza ottimale, dal momento che parliamo di pochissime righe di codice.

    Noto però che la struttura tra i dati in entrata e quelli in uscita è differente. In entrata hai un oggetto con le varie proprietà mentre in uscita, una volta applicato l'ordinamento, hai un array di oggetti.

    Bisogna capire quindi quale sia esattamente la tua esigenza.

    Se ti interessa mantenere la stessa struttura bisogna rivedere qualcosa.

    Ad ogni modo è possibile usare i metodi nativi per iterare/manipolare oggetti ed array, ottenendo anche uno script più stringato; non è detto però che sia più performante a livello di prestazioni rispetto ad una soluzione più ordinaria con l'uso dei cicli.

    Certo, in questo caso, data la ridotta quantità di dati da elaborare, la differenza di prestazioni e dell'uso di risorse sarebbe comunque un fattore irrisorio. Suppongo quindi che il tuo "più performante" possa essere inteso come "codice più stringato"; correggimi se sbaglio.

    Chiaramente si può risolvere in vari modi; qui una possibile soluzione:
    codice:
    const orari = { 
       lunedi: "07:30 - 12:30", 
       venerdi: "07:30 - 12:30", 
       mercoledi: "07:30 - 12:30", 
       giovedi: "07:00 - 12:30", 
       sabato: "07:30 - 11:45" 
    };
    
    const orariOrdinatiPerGiorno = ['lunedi', 'martedi', 'mercoledi', 'giovedi', 'venerdi', 'sabato', 'domenica']
        .reduce((a, b) => Object.assign(a, orari[b] && {[b]: orari[b]}), {});
    
    console.log(orariOrdinatiPerGiorno);
    Fai sapere e chiedi pure se hai bisogno di spiegazioni sul funzionamento.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  4. #4
    Utente di HTML.it L'avatar di Fichico
    Registrato dal
    Nov 2002
    residenza
    Bologna
    Messaggi
    581
    Ciao KillerWorm, intanto grazie per la risposta
    Con "performante" intendo rapidità di esecuzione :-)

    Confermo che vorrei avere, passando da un oggetto in input, ad un array di oggetti ordinato in base alla posizione del giorno della settimana, con questa interfaccia per intenderci:
    codice:
    export interface Orario {
      giorno: string;
      orario: string;
    }

  5. #5
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Ok, allora penso che quanto sei riuscito a trovare tu stesso possa andare più che bene a livello di prestazioni; penso non ci sia nulla da ottimizzare in questo senso
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.