Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Ordinamento MultiArrey con sort

    Salve,

    Mi ritrovo nel seguente problema:
    Ho creato un mio gestionale.. dove vado caricando le pratiche legate ai singoli clienti.

    Ogni pratica è composta nel seguente modo:
    codice:
    [/*IDPratica-337*/"337",[/*Datainizio-337*/"29/01/2015",/*DataFine-337*/"0",/*Esito-337*/"0",/*Cliente-337*/"338",/*Tipo-337*/"2",/*AgentePratica-337*/"2",/*Priorita-337*/"0",/*Stato-337*/"1",/*Motivazione-337*/"0",/*InGestione-337*/"10"],[
    [/*Data1-337*/"29/01/2015",/*Agente1-337*/"2",/*Azione1-337*/"14",/*Titolo1-337*/"Richiesta info",/*Desc1-337*/"Desc",/*Appuntamento1-337*/"0"],/*ad1-337*/
    [/*Data2-337*/"06/02/2015",/*Agente2-337*/"2",/*Azione2-337*/"1",/*Titolo2-337*/"Contatto cliente",/*Desc2-337*/"Desc",/*Appuntamento2-337*/"0"],/*ad2-337*/
    [/*Data3-337*/"12/02/2015",/*Agente3-337*/"2",/*Azione3-337*/"1",/*Titolo3-337*/"Chiamare cliente Modifica",/*Desc3-337*/"Desc",/*Appuntamento3-337*/"1"],/*ad3-337*/
    [/*Data4-337*/"14/04/2015",/*Agente4-337*/"2",/*Azione4-337*/"1",/*Titolo4-337*/"Contatto cliente",/*Desc4-337*/"Desc",/*Appuntamento4-337*/"1"],/*ad4-337*/
    ],[/*Pratica-337*/"0",/*Terreno-337*/"0",/*Progetto-337*/"0",/*Tecnico-337*/"0",/*Concessione-337*/"0",]],

    All'interno di ogni pratica vado caricando all'occorrenza l'azione eseguita.
    Ogni azione viene caricata tramite un file php che ricerca e scrive all'interno della pratica.
    Ogni azione è composta nel seguente modo:
    codice:
    [/*Data4-337*/"14/04/2015",/*Agente4-337*/"2",/*Azione4-337*/"1",/*Titolo4-337*/"Contatto cliente",/*Desc4-337*/"Desc",/*Appuntamento4-337*/"1"],/*ad4-337*/

    in questo caso vi ho segnalato l'ultima azione legata a questa pratica.

    Il problema arriva ora.
    Nel momento in cui, oggi, carico un azione legata ad oggi, la scriverà esattamente sotto quest'ultima evidenziata.

    Se oggi carico un azione passata, quindi con data precedente, la scriverà comunque sotto l'ultima appena creata.

    Nel momento in cui devo visualizzare la storia di questa pratica, a me occorre che tutte le azioni siano in ordine cronologico, quindi la funzione che ho creato è la seguente:

    codice:
    //ordinamento azioni
    //Recupero la data della prima azione
    var azionii=pratiche[id][2]
    var azioniiMax=azionii.length
    var a = azionii[0][0]
    a=a.split('/',3)
    var primadata=a[2]+a[1]+a[0]
    
    //Recupero la data dell'ultima azione
    var b = azionii[azioniiMax-1][0]
    b=b.split('/',3)
    var secondadata=b[2]+b[1]+b[0]
    
    //Ordine crescente
    azionii.sort(primadata,secondadata);
    In sostanza converto le date delle azioni da cosi 29/01/2015 a cosi 20150129
    Poi li metto in ordine crescente.

    Il problema è che la stampa che mi restituisce non è in ordine crescente e non riesco a capire perche.


    • 06/02/2015
    • 12/02/2015
    • 14/04/2015
    • 29/01/2015


    Vi prego di aiutarmi perche non so veramente come fare
    Ultima modifica di Samuele.Darenzo; 13-04-2015 a 09:54

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    prova cosi:

    codice:
    pratiche[id][2].sort(function(primadata,secondadata){
        primadata = primadata[0].split("/");
        secondadata = secondadata[0].split("/");
    
        firstDate = new Date(primadata[2], primadata[1] - 1, primadata[0]);
        secondDate = new Date(secondadata[2], secondadata[1] - 1, secondadata[0]);
     return firstDate - secondDate;
    });

  3. #3
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,691
    Ciao, buona la soluzione di Vindav.

    Posto una soluzione simile ma più compatta:
    codice:
    //ordinamento azioni
    var id = 0;
    var azionii=pratiche[id][2]
    
    azionii.sort(function(a,b){
      return a[0].split("/").reverse().join("")
            -b[0].split("/").reverse().join("");
    });
    
    // output
    for (var i=0; i<azionii.length; i++){
      console.log(azionii[i][0])
    }
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  4. #4
    Grazie Vindav.. la tua soluzione funziona alla perfezione.

    Stavo pensando in questi giorni che è possibile incappare in un problema, ovvero che l'ultima azione scritta non sia l'ultima a livello cronologico.

    Sarebbe possibile fare una ricerca per scovare la data più lontana è impostarla come secondadata ?

    Vi ringrazio ancora per la risposta tempestiva.

  5. #5
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,691
    Ciao,
    La funzione sort() riordina tutte le voci dell'array secondo il criterio usato dentro la funzione stessa. Quindi l'ultima azione inserita sarà confrontata comunque con tutte le altre.

    Non capisco la tua perplessità o forse non ho capito io cosa stai chiedendo ora. Cosa intendi per secondadata?
    Dal tuo primo post mi pare però di capire che non hai compreso bene come agisce la funzione sort().Ad ogni modo questa funzione riordina tutte le voci dell'array. Non confronta solo la prima e l'ultima, ma in sostanza fa una ricorsione tra tutte le voci, confrontando ogni voce con le restanti, così da stabilire quale priorità dare ad ognuna di esse.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  6. #6
    ok Perfetto.. Sei stato chiarissimo.

    Un ultima cosa se mi è permesso volevo capire..
    Un problema che riscontro e che non riesco a risolvere è il seguente:

    Ogni volta che eseguo una qualsiasi azione all'interno del mio gestionale.. le operazioni che si eseguono sono le seguenti:
    -una funzione in js mi gestisce il reindirizzamento ad una pagina in php che riceve i paramentri tramite url.
    es. http://www.miosito.it/modifica.php?v...ato?nuovo-dato

    -la pagina in php esegue una ricerca all'interno del foglio js cercando "vecchio-dato" rimpiazzandolo con "nuovo-dato"
    -successivamente alla modifica reindirizza alla pagina gestionale.html

    la pagina gestionale.html una volta caricata non carica mai le azioni aggiornate..
    esiste una qualche funzione che mi permetta di caricare tutti i file .js aggiornati legati a quella pagina ?

    per farvi capire ogni volta che faccio una modifica.. successivamente per visualizzare le modifiche devo aggiornare la pagina.

Tag per questa discussione

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 © 2024 vBulletin Solutions, Inc. All rights reserved.