PDA

Volledige versie bekijken : array legen


latino
%Europe/Berlin %782 %2005, 19:46
mensen ik heb gezocht maar niet gevonden

ik wil een aaray aanmaken:

mijnArray:Array = new Array();

daar stop ik dmv mijnArray.push() wat dingen in

nu elker keer wordt er dus een waarde ingezet. je krijgt dus:

mijnArray["a","b",etc];

nu wil ik dat de array geleegd wordt als ik op een knop druk. Bestaat er een functie die de hele array leegt zonder de array te deleten? :confused:

Roenes
%Europe/Berlin %786 %2005, 19:53
mijnArray = new Array();Deze maakt gewoon een lege array aan over de oude array waardoor deze dus verdwijnt :)

//Edit
Voorbeeldcode:

var arr = new Array();
arr.push("A");
arr.push("Applex");
arr.push("nog wa");
trace(arr); //3 elementen achter elkaar
arr = new Array();
trace(arr); //Niets (lege regel in output venster)
arr.push("eerste item");
trace(arr); //Traced "eerste item"

latino
%Europe/Berlin %788 %2005, 19:55
zo simpel :) thanks, maar blijft die array wel op dezelfde plaats binnen het script? als ik die array op regel 5 heb gemaakt wil ik ook dat die daar blijft en niet dat er een nieuwe array wordt gemaakt binnen die button

matzo
%Europe/Berlin %806 %2005, 20:22
ik weet niet of die daar dan blijft maar desnoods doe je het zo
for(i=0; i<arr.lenght; i++){
arr[i]=null;
}
ik denk dat dat ook gaat.

Tha Narie
%Europe/Berlin %817 %2005, 20:37
Wat bedoel je met 'blijven' ?
Regels boeien helemaal niets. Variables zijn gewoon namen die verwijzen naar stukjes geheugen, waar je dingen in opslaat.

Wat Roenes doet is de variable overschrijven met een nieuwe array.
Wat matzo doet is elk item in de array 'null' maken, maar daarbij wordt de array zelf niet null. Die heeft nog steeds die elementen.

Als je letterlijk alle waardes uit de array wilt halen, zou je moeten doen:
arr.splice(0, arr.length);
Maar Roenes z'n methode werkt goed genoeg ;)

Je array blijft hoe dan ook gewoon bestaan.

matzo
%Europe/Berlin %859 %2005, 21:37
Wat bedoel je met 'blijven' ?
Regels boeien helemaal niets. Variables zijn gewoon namen die verwijzen naar stukjes geheugen, waar je dingen in opslaat.

Wat Roenes doet is de variable overschrijven met een nieuwe array.
Wat matzo doet is elk item in de array 'null' maken, maar daarbij wordt de array zelf niet null. Die heeft nog steeds die elementen.

Als je letterlijk alle waardes uit de array wilt halen, zou je moeten doen:
arr.splice(0, arr.length);
Maar Roenes z'n methode werkt goed genoeg ;)

Je array blijft hoe dan ook gewoon bestaan.
je hebt helemaal gelijk.
maar aan die regels boeien niet zal ik u nog aan doen herinneren. :eek: :p
maar ik wist niet zeker of dat dan nog wel een variabele bleef van de _root.
als niet een variabele van de button.
dat soort problemen of twijfelsheb je dus niet met Java.

Tha Narie
%Europe/Berlin %897 %2005, 22:31
'op welke regel' een stukje script staat maakt niets uit. Het gaat om het code-blok (tussen { en }) waar hij in staat, en naar welke scope hij verwijst:

var arr // lokaal;
arr // timeline waar het script op staat
this.arr // refereert naar het thisObject van het codeblock waar hij in staat (bv een _mc.onRelease-functie

matzo
%Europe/Berlin %917 %2005, 23:00
effe offtopic
" en naar welke scope hij verwijst:"
wat is een scope

matzo
%Europe/Berlin %921 %2005, 23:06
Wat Roenes doet is de variable overschrijven met een nieuwe array.
Wat matzo doet is elk item in de array 'null' maken, maar daarbij wordt de array zelf niet null. Die heeft nog steeds die elementen.

ja en nu snap ik ook opeens waarom dat zoveel uitmaakt..
bij mijn code maakt dat nooit zoveel uit,
bij push gebruikt hij als plaats van het nieuwe element array.length(oftewel nummer laatste element+1)
en dus kan dat problemen geven bij het lezen aangezien push dan niet in nul schrijft

latino
%Europe/Berlin %275 %2005, 07:36
ik dacht dat het uitmaakte waar code staat:

als ik die array als eerste opschrijf dan kan ik er altijd bij zeg maar

ik dacht dat als ik die code in een onrelease zet dan staat die array code ineens tussen die onrelase/button

de code wordt toch van boven naar beneden gelezen? dus daar moet je toch rekening mee houden?

chic0
%Europe/Berlin %391 %2005, 10:24
effe offtopic
" en naar welke scope hij verwijst:"
wat is een scope
De scope is de ruimte waarbinnen een variable bekend is.
In ActionScript zijn er 3 types van variable scopes:
Global variables zijn bekend over alle timelines
Timeline variables zijn bekend binnen hun timeline
Local variables zijn bekend binnen de functie waarin ze gedeclareerd zijn (met var)


In het begin stelde ik het me voor als een soort zoom, waarbij de global variables gewoon zichtbaar zijn, waarbij je voor timeline variables een beetje moet inzoomen, en waarbij je voor local variables nog meer moet inzoomen.
En dat is eigenlijk nog niet zo'n slechte voorstelling want die hierarchie is er wel degelijk.

Ik hoop dat je dat snapt.
Je had dit ook gewoon kunnen opzoeken :)

matzo
%Europe/Berlin %401 %2005, 10:37
dus als roenes' code nu zo was
op de _root:
var arr:Array = new Array();

en op de button 'arraywissen'
var arr:Array = new Array();
dan is arr wel alleen berijkbaar
via _root.arraywissen.arr;
maar aangezien zijn code zonder opnieuw var voor de declaratie
is dat niet zo, of zit ik nu fout

Tha Narie
%Europe/Berlin %414 %2005, 10:56
Als je een variable in een functie (opnieuw) met 'var' aanmaakt, is dat een lokale variable in die functie. Deze verdwijnt zodra de functie is afgelopen. De variable op de _root blijft daar gewoon naast bestaan.
Gebruik je hem binnen de functie zonder 'var', dan gebruik je de variable die op de _root staat.

@chic0 : Er is nog een 4e scope, binnen in een 'with' (of telltarget). Maar deze worden (gelukkig) bijna nooit meer gebruikt ;)

@latino : De code wordt alleen per code-blok van boven naar beneden gelezen. Als ze in functies staan wordt deze pas uitgevoerd als je ze aanroept.
Natuurlijk is het wel zo dat je variables die je nodig hebt bovenaan declareert, maar als je ze later ergens aanpast, verandert dat niets aan de 'regel'.

chic0
%Europe/Berlin %438 %2005, 11:31
Klopt Narie, ik heb hem niet vermeld omdat men mij ook al heeft afgeraden die nog te gebruiken :) Waarom wordt het eigenlijk afgeraden?

matzo
%Europe/Berlin %445 %2005, 11:41
ah ja nu ben ik weer mee,
eigenlijk verschilt het niet zoveel, buiten dat in Java
alles op _root.niveau wordt opgeslagen.
maar als het een var binnen een functie is,
wordt de var na de functie ook verwijderdt
thanks narie & chic0

latino
%Europe/Berlin %730 %2005, 18:32
hmm ok maar:

"Local variables zijn bekend binnen de functie waarin ze gedeclareerd zijn (met var)"

ik zie ook scripts met var ervoor die niet in een functie staan en in boeken staat dat ook..dus var is niet alleen voor binnen een functie

mateo)
%Europe/Berlin %740 %2005, 18:46
met var declareer je een variabele expliciet binnen een bepaalde scope. dat betekent in normaal nederlands dat als je op de root var myVar = "dinges" hebt staan, die variabele van overal bereikbaar is met _root.myVar. als je hetzelfde doet binnen een functie is de variabele alleen maar in de functie bereikbaar.