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

    Ordinamento "manuale" di un array di oggetti

    Salve a tutti.
    Nel mio sito, per fini statistici ho creato una pagina php strutturata in una tabella HTML con per ogni elemento il nome dell'elemento e il numero di click.

    Ora, anche per esercitazione, vorrei ordinare tutti gli elementi in ordine decrescente di click; per fare ciò, appena clicco in una sezione avvio una funzione javascript Ordina() che si occupa di ordinare gli elementi e stamparli nella nuova pagina.

    La funzione funziona (scusate il gioco di parole) così:
    1)definisco un'oggetto con i campi nome e clicks.
    2)creo un'array di tutti questi oggetti.
    3)assegno dei valori ai campi di questi oggetti direttamente leggendo la pagina HTML
    4)procedo a ordinare

    Il problema è che, secondo il browser, 9 è maggiore di 30, come è maggiore di quindici, per esempio. Cioè, paragona solo la prima cifra.

    Esempio
    questa è la pagina HTML:

    Elemento 1: 3
    Elemento 2: 15
    Elemento 3: 9

    e questo è uno spezzone di codice:

    function elemento(snome, sclicks){
    this.nome=snome;
    this.clicks=sclicks;
    }

    function Ordina()
    {
    var mioarray = new Array();
    mioarray[0] = new elemento("Elemento 1",document.getElementById("1").innerHTML);
    mioarray[1] = new elemento("Elemento 2",document.getElementById("2").innerHTML);
    mioarray[2] = new elemento("Elemento 3",document.getElementById("3").innerHTML);
    var controllo = false;
    var J;
    var X = new elemento("boh",5);
    do {
    controllo=false;
    for (J=0; J<2; J++)
    if (mioarray[J].clicks<mioarray[J+1].clicks) {
    X.nome=mioarray[J+1].nome;
    X.visite=mioarray[J+1].clicks;
    mioarray[J+1].nome=mioarray[J].nome;
    mioarray[J+1].clicks=mioarray[J].clicks;
    mioarray[J].nome=X.nome;
    mioarray[J].clicks=X.clicks;
    controllo=true;
    }
    }
    while (controllo==true);
    }


    Nella lettura della pagina html non c'è nessun problema, ma nell'ordinamento dei click si infatti l'array verrà ordinato così:

    Elemento 3: 9
    Elemento 1: 3
    Elemento 2: 15


    Perchè mi fa questi brutti scherzi?

  2. #2
    P.s. forse ci sono! E' forse dovuto al fatto che i valori "clicks" vengono trattati come stringhe e quindi ordinate alfabeticamente? Mi sa proprio di si.
    Quindi come faccio a convertire quei valori in numeri interi? avevo pensato di mettere degli zeri davanti...ma non mi sembra un'ottima idea.

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.