Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116

    copiare un vettore in un'altro

    Vorrei una conferma da chi tratta javascript meglio di me

    In una pagina ho un vettore a.

    Da un pulsante richiamo una funzione che riceve come parametro il vettore b.

    Per copiare il vettore b in a di solito procedo così:
    1) azzero la lunghezza del vettore a
    2) per ogni elemento di b, copio elemento b in a

    E' veloce, però adesso ho provato questo frammento di codice, in IE e Fierefox
    codice:
    var a = [1,2,3];
    function Button1_onclick() {
    	var b = [10,20];
    	prova(b)
    	b = null;
    }
    function prova(x)
    {
    	a = x;
    	x = null;
    }
    
    function Button2_onclick() {
    	
    	alert(a);
    }
    sembra che basti fare solamente: a = b. Con alert(a) ottengo sempre i valori del vettore b, che è quello che volevo.

    SBAGLIO? :master:

    Pietro

  2. #2

    Operatore = tra vettori in Javascript

    Ciao Pietro
    in Javascript l'operatore di assegnamento (=) applicato a due array non effettua una copia per valore ma per riferimento. Questo significa che le due variabili array puntano in realtà alla stessa locazione di memoria e quindi la modifica di un elemento di un array si ripercuote anche sull'altro.

    Ecco un esempio sullo stile del tuo che conferma quanto detto:

    var a = [1, 2, 3];
    var b = [10, 20, 30];

    function Button1_onclick()
    {
    copia_vettore(b);
    }

    function Button2_onclick()
    {
    // provo a modificare uno dei due vettori
    b[0] = 100;

    visualizza();
    }

    function copia_vettore( x )
    {
    a = x;
    x = null;
    }

    function visualizza()
    {
    alert("a = " + a + "\nb= " + b);
    }

    al click sul secondo pulsante (dopo aver premuto il primo) viene mostrato

    a = [100, 20, 30]
    b = [100, 20, 30]

    invece di

    a = [10, 20, 30]
    b = [100, 20, 30]

    Quindi se si desidera copiare un array in Javascript per trattarlo come un nuovo array è opportuno che procedi come al tuo solito cioè:
    1) creo un nuovo array
    2) copio gli elementi di uno nell'altro

    Spero di esserti stato di aiuto.
    Angella Andrea

  3. #3
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116

    Re: Operatore = tra vettori in Javascript

    Originariamente inviato da angellaa
    Spero di esserti stato di aiuto.
    Ogni risposta è utile

    Era una discussione del 23-11-2005 14:16 come caspita hai fatto a recuperarla? :master: Figurati che non ricevo neanche le notifiche di risposta via e-mail e ho visto la risposta solo per caso
    Pietro

  4. #4
    Avendo avuto lo stesso problema, Google mi ha portato a te.
    Sinceramente non avevo neanche fatto caso alla data....in effetti ho risposto un pò in ritardo.

    Ciao e buon lavoro
    Angella Andrea

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    ai suoi tempi avevo risolto clonando il vettore

    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
        <title>Pagina senza titolo</title>
    
    <script language="javascript" type="text/javascript">
    // <!CDATA[
    Array.prototype.clone = function () 
    {
        var tmp = [];
        for(var i in this)
        {
            if(this[i].constructor == Array)
            {
                tmp[i] = this[i].slice(0);
            }
            else
            {
                tmp[i] = this[i];
            }
        }
        return tmp;
    };
    
    function $() 
    {
        var elements = new Array();
    
        for (var i = 0; i < arguments.length; i++) 
        {
            var element = arguments[i];
            if (typeof element == 'string')
                element = document.getElementById(element);
    
            if (arguments.length == 1)
                return element;
    
            elements.push(element);
        }
    
        return elements;
    }
    
    
    
    
    function Button1_onclick() 
    {
        var v = $("TextArea1");
        
        var a = [10,20,30];//vettore originale
        v.value = "a = " + a + "\r\n";//mostro vettore originale
        
        var b = a;//assegno a b l'indirizzo di a
        v.value += "b = " + b + "\r\n";//mostro b
        b[1] = 999;//modifico un elemento
        
        v.value += "a = " + a + "\r\n";//mostro che ho modificato il vettore originale
    }
    
    function Button2_onclick() 
    {
        var v = $("TextArea1");
        
        var a = [10,20,30];//vettore originale
        v.value = "a = " + a + "\r\n";//mostro a
        
        var b = a.clone();//b punta ad un clone di a
        v.value += "b = " + b + "\r\n";//mostro b
        b[1] = 999;//modifico b
        
        v.value += "a = " + a + "\r\n";//mostro che a è intatto
    }
    
    // ]]>
    </script>
    </head>
    <body>
        <input id="Button1" type="button" value="button" onclick="return Button1_onclick()" />
        <input id="Button2" type="button" value="button" onclick="return Button2_onclick()" />
        
    
    
        <textarea id="TextArea1" style="width: 573px; height: 406px"></textarea>
    </body>
    </html>
    Pietro

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.