Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: return array

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    284

    return array

    Ho creato questa funzione ricorsiva che in teoria mi dovrebbe restituire il contenuto di un Array...perchè invece mi restituisce undefined?




    function return_array(_array,righe){

    if(righe>=t) {
    for(var i=0;i<_array.length;i++){
    arr_vuoto.push(_array[i]);

    }
    } else {
    return arr_vuoto;
    }

    t++;

    return_array(_array,righe);

    }

    righe=1;
    prova=[1,10,15,23,40];

    t=0;
    arr_vuoto=new Array();
    trace(return_array(prova,righe))// risultato undefined;

  2. #2
    Onestamente non mi pare di aver colto il lavoro che dovrebbe svolgere questa funzione, mi pare un tantino confusa... :quipy:

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    284
    in realtà la funzione che ho postato non serve a nulla!! , o meglio, dovrebbe servire per capire perche non riesco ad ottenere il valore dell' array.

    Capisco che non è facile aiutare qualcuno se non si sa bene dove vuole andare a parare...cosidera cmq che questa funzione esegue un controllo e poi mi popola un' array, se il valore di righe non è maggiore del valore di t mi dovrebbe restituire l' array appena popolata.


    p.s. E' una parte (riadattata per l' esempio) di un' altra funzione molto piu lunga.

    Scusa per la poca chiarezza, ma non riesco a fare di meglio, sono 8 ore di fila che sto davanti al comp.(ho la testa rallentata)

  4. #4
    Scusa ma io non ci vedo molta coerenza.

    Se tu vuoi popolare array_vuoto con i valori di prova solo nel caso la variabile righe sia maggiore o uguale a t non hai nemmeno bisogno di farti ritornare nulla...

    Altrimenti non riesco ancora a focalizzare il tuo problema.

    P.S.: anch'io sono 8 ore che sono davanti al PC e questo da circa 5 anni, ma non è questo il motivo per cui non focalizzo il tuo problema...

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    284
    Se tu vuoi popolare array_vuoto con i valori di prova solo nel caso la variabile righe sia maggiore o uguale a t non hai nemmeno bisogno di farti ritornare nulla...
    Ok fin qui siamo. Effettivamente una volta che l' array_vuoto è popolato il mio problema è risolto, ma vorrei capire cmq perchè il return mi da come valore undefined e non il valore dell' array appena popolato...giusto per sapere se dal punto di vista sintattico ho sbagliato qualcosa.

  6. #6
    Semplicemente perché tu il return non lo fai, e quindi il valore della chiamata alla funzione è undefined per forza di cose...

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    284
    Cavolo sarà che mi sono completamente rinco*****ito ma a me sembra che per il return la funzione ci debba passare, infatti se metto trace(arr_vuoto) al posto di return arr_vuoto mi stampa l' output giusto. :master:

  8. #8
    ci passa solo nel caso t sia minore di righe ma a me pare che questo caso non si potrà mai verificare se righe è uguale a 1 e t uguale a 0...

    Non ti pare?

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    284
    scusa se ti contraddico ma if(righe>=t){}else{ return;}:

    se t è maggiore di righe si passa per il return;

    p.s. se hai un po di tempo prova a copiare e incollare questo script:

    function return_array(_array,righe){

    if(righe>=t) {

    for(var i=0;i<_array.length;i++){
    arr_vuoto.push(_array[i]);

    }

    } else {
    trace(arr_vuoto);
    return ;
    }

    t++;

    return_array(_array,righe);

    }

    righe=1;
    prova=[1,10,15,23,40];

    t=1;
    arr_vuoto=new Array();
    return_array(prova,righe);

    vedrai che l' output è corretto;

    p.s.2 t=1 avevo scritto male

    Grazie per la pazienza. :gren:

  10. #10
    Innanzi tutto non è molto elegante richiamare una funzione da se stessa...

    A parte ciò, ti ritorna undefined perché la prima chiamata non ritorna niente, dato che non passa per "else", la seconda chiamata invece ci passa e ti ritorna l'array giusto, però essendo un'altra chiamata non ti ritorna il valore nella prima chiamata...

    Non so se mi sono spiegato.

    E' solo un errore di approccio il tuo, tutto sommato funziona ma non nel modo in cui la concepisci tu, se tu chiami una funzione essa deve restituirti un valore se quel valore ti serve, ma se non ritorna nulla non potrai mai avere quel valore indietro.

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.