Variablen werden überschrieben

daflowjoe

Mitglied
Hallo,

ich habe nun folgendes Problem ich benutze nun extra folgende Form um mir 2 Arrays in einen Movieclip zu speichern

Code:
_root.hilf_mc.lastvalue = jahr_ges;
    _root.hilf_mc.lastname = jahr_besch;

Dabei werden die Werten allerdings immer wieder überschrieben, obwohl von nirgendwo aus zugegriffen werden kann. Ich habe auch schon die Variablen geändert und versucht die Variablen sonstwie extrem zu kapseln. Sie werden immerwieder überschrieben!

Das sind warscheinlich die 2 Übeltäterfunktionen... Ich kann das nicht nachvollziehen...
Code:
on(release)
{

    local_values = _root.lastvalues;
    local_names = _root.lastnames;
    
    wert = sort_zugriffe(local_names, local_values);
    localvalues = wert[0];
    localnames = wert[1];
    
    if(_root.flip_desc == 0)
    {
        _root.flip_desc = 1;
    }
    else
    {
        _root.flip_desc = 0;
    }
    
    make = make_diagram(localvalues, localnames, _root.lasthead);
    _root.unsorted = 1;
}

Code:
on(release)
{
    if(_root.flip_desc == 1)
    {
        _root.flip_desc = 0;
    }
    
    else
    {
        _root.flip_desc = 1;
    }
    
    if (_root.unsorted == 1)
    {
        trace(_root.hilf_mc.lastname);
        trace(_root.hilf_mc.lastvalue);
        make = make_diagram(_root.hilf_mc.lastvalue, _root.hilf_mc.lastname, _root.lasthead);
        _root.unsorted = 0;
        
    }
    else
    {
        make = make_diagram(_root.lastvalues, _root.lastnames, _root.lasthead);
        trace(_root.hilf_mc.lastname);
        trace(_root.hilf_mc.lastvalue);
    }
}


In diesem Fall werden die alten extra in einem Movieclip abgespeicherten Moviecliparrays aus Funktion 2 immerwieder von der ersten sort Funktion mitgeordnet. Wie kann denn das sein?

Edit: Der Fehler muss irgendwo in der Sortfunktion sein, denn noch bevor die Funktion durchlaufen ist bleiben die Variablen unbehelligt, am Ende der Funktion sind die dann mitsortiert:
Code:
function sort_zugriffe(names, values)
{
	trace(_root.hilf_mc.lastvalue);
	trace(_root.hilf_mc.lastname);
	var laenge = values.length;
	var hilf;
	for(var i = 0; i < laenge-1; i++)
	{
		for(var h = 0; h < laenge-1; h++)
		{
			if(values[h] > values[h+1])
			{
				hilf = values[h];
				values[h] = values[h+1];
				values[h+1] = hilf;
				
				hilf = names[h];
				names[h] = names[h+1];
				names[h+1] = hilf;
			}
		}
	}
	
var wert = new Array();
wert[0]= values;
wert[1]= names;
trace(_root.hilf_mc.lastvalue);
	trace(_root.hilf_mc.lastname);
return wert;

}

Mfg Joe
 
Zuletzt bearbeitet:
Hi,

Arrays werden (als nicht trivialer Datentyp) als Referenz kopiert und an Funktionen übergeben. Legst Du eine Kopie eines Arrays an, und sortierst das Ursprungsarray, so wird die Kopie anschließend ebenfalls neu sortiert sein (da es sich nur um einen Zeiger auf das eigentliche Objekt handelt).

Um ein Array "unantastbar" zu kopieren, musst Du die Elemente einzeln kopieren:
Code:
var a = new Array(2, 3, 1);

var b  = hardCopy(a);

a.sort();

trace(a); // Ausgabe: 1, 2, 3

trace(b); // Ausgabe: 2, 3, 1

function hardCopy(src) {
  var dest = new Array();
  for (var i=0; i<src.length; i++) {
    dest[i] = src[i];
  }
  return dest;
}

Gruß
.
 

Neue Beiträge

Zurück