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

    Aiuto funzione trova numero vicino in un array

    Buonasera,
    mi chiamo gabriel e sono nuovo nel foro. Vi saluto
    Ho bisogno del vostro aiuto. Ho fatto una funzione che cerca in un array il valore più vicino a quello che passo come parametro. Ho provato in tutti i modi ma la funzione mi da risultati strani, con alcuni numeri funziona e con altri no. Non riesco a spiegarmi cosa stia succedendo. Ho provato altre varianti senza usare IndexOf ma aggiungendo un altro for che scorre l'array ma niente, sempre lo stesso problema. Potete aiutarmi?
    Vi ringrazio in anticipo.
    Trascrivo il codice

    codice:
    function trovaNumeroVicino(valore)
    {
        var array = [5,10,12,15,18,22,27,33,39,47,56,68,82,100,120,150,180,220,270,330,390,470,560,680,820,1000,1200,1500,1800,2200,2700];
        var numVicinoGiu=-5;
        var numVicinoSu=-5;    
        var tentativiGiu;
        var tentativiSu;
        
        // cerco nell'array valori vicini più bassi  
        // ----------------------------------------
        for (var tempNum = valore; tempNum > -1; tempNum--)
            {
                if (array.indexOf(tempNum) > -1)
                    { numVicinoGiu = tempNum;
                      break;
                    }
                else 
                    {
                    tentativiGiu++;
                    }
            }
        
        // cerco nell'array valori vicini più alti  
        // ----------------------------------------    
        for (var tempNum = valore; tempNum < array.length; tempNum++)
            {
                if (array.indexOf(tempNum) > -1)
                    { numVicinoSu = tempNum;
                      break;
                    }
                else 
                    {
                    tentativiSu++;
                    }
            }
        
        // ritorno il valore con minori tentativi (su o giù il valore passato)  
        // -------------------------------------------------------------------            
            
        if (tentativiGiu < tentativiSu)
            { return numVicinoGiu;
            }
        else
            { return numVicinoSu;
            }
    }
    Ultima modifica di inventable; 30-01-2015 a 20:24

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Farei cosi.

    Codice PHP:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <
    html>
    <
    head>
    <
    title>Untitled</title>
    <
    script language="JavaScript" type="text/javascript">
    <!--
    function 
    trovaNumeroVicino(valore){    
     
    my_array  = [5,10,12,15,18,22,27,33,39,47,56,68,82,100,120,150,180,220,270,330,390,470,560,680,820,1000,1200,1500,1800,2200,2700];
     
    min_diff  9999999999999;
     
    risultato 0;
     
     for(
    i=0;i<my_array.length;i++) {
      
    diff Math.abs(my_array[i] - valore);
     if (
    diff min_diff) {
       
    min_diff  diff;
      
    risultato my_array[i];
     } 
     }
     return 
    risultato;
    // function trovaNumeroVicino(valore)
     
    //-->
    </script>
    </head>
    <body>
    <script language="JavaScript" type="text/javascript">
    <!--
    alert(trovaNumeroVicino(87));
    alert(trovaNumeroVicino(750));
    //-->
    </script>

    </body>
    </html> 
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Non ci posso credere, funziona!!!

    Perché la mia non funzionava?
    In ogni modo ti ringrazio di cuore.

  4. #4
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Quote Originariamente inviata da inventable Visualizza il messaggio
    Non ci posso credere, funziona!!!

    Perché la mia non funzionava?
    In ogni modo ti ringrazio di cuore.
    Non saprei dirti. Puoi migliorare lo script uscendo dal ciclo se la differenza = 0.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  5. #5
    Ok, grazie!!

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