Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 26-12-2010, 10:19   #1 (permalink)
Neuer User
 
Registriert seit: May 2009
Beiträge: 13
AS3: Array nach Variable durchsuchen

Hallo,

ich versuche mich gerade in das Thema Array reinzuarbeiten und habe hierzu ein Forumsbeispiel angepasst...
Aber irgendwo scheint noch ein Fehler zu existieren.
Leider springt mein AS immer gleich zu gotoAndPlay ?!

Es exitiert ein leeres Array: array_warenkorb
Das Array
var array_warenkorb:Array = new Array();
und die Variablen wurden Global gesetzt.
Wird nun Button x gedrückt wird u.g. Funktion ausgeführt:
Ziel: Wenn wkproduktei nicht in array dann füge wkproduktei mit push hinzu

PHP-Code:
function mouseClickinwk(event:MouseEvent):void {
    
wkproduktei ipbez.text// Wert aus Textfeld in Variable
    
wkpreisi ipeuro.text// Wert aus Textfeld in Variable
    
for (var asearch=0asearch array_warenkorb.lengthasearch++) 
       { 
        if (
array_warenkorb[asearch] != wkproduktei)          { 
               
array_warenkorb.push(wkproduktei,wkpreisi);
          
trace (array_warenkorb);
              } 
       } 
    
gotoAndPlay(5); // nextframe
    

Adama74 ist offline   Mit Zitat antworten
Alt 26-12-2010, 11:27   #2 (permalink)
~~~~~~~~~~~~
 
Benutzerbild von _geo_
 
Registriert seit: May 2002
Ort: AUSTRIA (OÖ)
Beiträge: 3.298
ActionScript:
  1. function mouseClickinwk(event:MouseEvent):void
  2. {
  3.     wkproduktei = ipbez.text;
  4.     wkpreisi = ipeuro.text; // Wert aus Textfeld in Variable
  5.     if( array_warenkorb.indexOf(wkproduktei) == -1 )
  6.     {
  7.         array_warenkorb.push(wkproduktei,wkpreisi);
  8.     }
  9.     gotoAndPlay(5); // nextframe
  10. }

Wenn du gerade mit Array anfängst würde ich dir raten die Doku mal durchzuarbeiten, vieles muss man nämlich gar nicht selbst machen weils das schon gibt

http://help.adobe.com/de_DE/AS3LCR/F...#indexOf%28%29

lg
__________________
--- :P ---

Blog
Bei unerwünschten Nebenwirkungen zerreißen Sie die Packungsbeilage oder erschlagen ihren Arzt oder Apotheker

Geändert von _geo_ (26-12-2010 um 18:18 Uhr)
_geo_ ist offline   Mit Zitat antworten
Alt 26-12-2010, 13:38   #3 (permalink)
Neuer User
 
Registriert seit: May 2009
Beiträge: 13
Funktioniert ... Vielen Dank !

Leider finde ich die online Doku seit CS4 etwas ... gewöhnungsbedürftig.
Finde das ganze auch nicht so gut Beschrieben wie ichs gerne hätte
da ich vieles einfach über F1 und Suche nicht finde.
Ich denke, damals im MX Studio, war das ganze etwas besser und die Beispiele, na waren einfach mehr ...

Eventuell liegt das aber auch die Umgewöhnung auf AS3 !

Aber es gibt ja noch gute Bücher zu dem Thema :-)
Adama74 ist offline   Mit Zitat antworten
Alt 26-12-2010, 13:43   #4 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Ja, es liegt an der Umgewöhnung. Am besten die API Dokumentation herunterladen.

Diese Art der API wird seit Jahren verwendet... It's Provence so to say.
Omega Psi ist offline   Mit Zitat antworten
Alt 29-12-2010, 16:23   #5 (permalink)
Neuer User
 
Registriert seit: May 2009
Beiträge: 13
Erweiterung auf Mehrdimensionale Arrays

Jetzte möchte ich das ganze wie folgt erweitern:
Bei jedem Aufruf der Funktion soll überprüft werden ob wkproduktei
schon existiert ... wenn nicht wird neues array angelegt.

Leider geht genau diese überprüfung nicht ?

Ergabnis laut trace je funktionsaufruf:
1. Aufruf: Vogelfutter, 5.00,1,5.00
2. Aufruf: Vogelhaus, 45.00,1,45.00
3. Aufruf: Vogelfutter, 5.00,1,5.00
Vogelhaus, 45.00,1,45.00
Vogelfutter, 5.00,1,5.00 <- sollte ja nicht mehr erscheinen da schon angelegt -> if (array_warenkorb.indexOf(wkproduktei) == -1 ) !

PHP-Code:
function mouseClickinwk(event:MouseEvent):void
    
{    
    
wkproduktei ipbez.text;
    
wkanzahli 1;
    
wksummei ipeuro.text;
    
wkpreisi ipeuro.text// Wert aus Textfeld in Variable 
    
if (array_warenkorb.indexOf(wkproduktei) == -)    
        {        
        
array_warenkorb[idholder] = [wkproduktei,wkpreisi,wkanzahli,wksummei]; 
        for (
wkproduktei in array_warenkorb// zum test ausgabe
            
{
            
trace (array_warenkorb[wkproduktei]);
            }
        
idholder++;
        } 
    
gotoAndPlay(5); // nextframe
    

Adama74 ist offline   Mit Zitat antworten
Alt 29-12-2010, 17:01   #6 (permalink)
Neuer User
 
Registriert seit: May 2009
Beiträge: 13
for abfrage einbauen ?

Wenn ich vor der if abfrage sowas wie
PHP-Code:
for(var myelement in myarray)
{

einbaue gehts leider nicht da mein array ja erst noch befüllt werden muss !?
Adama74 ist offline   Mit Zitat antworten
Alt 29-12-2010, 17:24   #7 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
indexOf sucht in einem array. deine infos liegen aber jetzt in einem array, das sich in einem array befindet. du suchst am falschen ort!


empfehlung: (das hatte ich doch letztens schonmal empfohlen)
nimm ID's (namen geht auch können sich aber ändern bzw. werden übersetzt, ID's sind besser, weil die bleiben immer unverändert - ein fels in der brandung)
und nimm objekte anstatt arrays.
und deine struktur ist falsch!
Code:
// liste aller zur verfügung stehender produkte
// das ist typisch ein objekt: man sucht nicht das 12. sondern ein bestimmtes produkt
// wenn hier überhaupt eine anzahl, dann verpackungseinheiten, preisstaffeln
// aber auf garkeinen fall eine kaufmenge!
// könnte ja sein, das man einen sittich in rot und einen in blau kaufen will
var produkt:Object = {}; // wenn du OOP kannst, dann eine eigene klasse erstellen
produkt['4712']= {name:'Vogelfutter', preis:5.00};
produkt['villa']= {name:'Vogelhaus', preis:45.00};
produkt['sittich']= {name:'Vogel', preis:1.50, spezial:'aufblasbar', color:['rot','grün','blau']};
//
// warenkorb
// der ist typisch ein array***: man kauft n-objekte (welche ist erstmal egal)
// zum produkt-angebot kann es mehrere warenkörbe geben, prod & wk gehört getrennt
var warenkorb:Array = []; // eigene klassen programmieren ist besser, ist klar
warenkorb.push({produktID:'4712', anzahl:13});
warenkorb.push({produktID:'sittich', anzahl:1, color:'blau'});
// produkt:'4712' anstatt der ID könnte man auch eine referenz auf das produkt angeben
// nach möglichkeit nichts doppelt speichern! alle infos aus produkt gehören nicht in den warenkorb
// es gibt fälle, das angebot und kauf zeitlich so weit auseinander liegen, das sich die preise
// ändern könnten. dann muss natürlich eine kopie des angebotenen preises erstellt werden ...
//
// doppelt? hier muss man einfach ein programm schreiben, das die liste durchgeht und sucht.
// am beispiel mit den sittich-farben soll verdeutlicht werden, man kann nicht immer
// nur nach einem wert testen z.b.
function addWarenkorb(id:String, anzahl:int):void {
  var doppelt:Boolean=false;
  for (var s:String in warenkorb) {
    if (warenkorb[s].produktID == id){ // gibt es schon, anzahl hat sich geändert
      doppelt=true;
      warenkorb[s].anzahl = anzahl;
      continue;
    }
  }
  if (!doppelt) { // ist neu
    warenkorb.push({produktID:id, anzahl:anzahl});
  }
}
//
// summen berechnen macht man per programm. oder hast du angst, 
// dass dein 3 gigaherz rechner nicht schnell genug den gesamtbetrag errechnen könnte? ;-)
// wenn man zwischenwerte speicher, dann muss sicher gestellt sein, das auch immer
// bei allen änderungen alle betroffenen zwischenwerte neu berechnet werden.
// da ist es doch sicherer und einfacher die summe komplett neu zu berechnen. z.b.
function kaufsumme():Number {
  var sum:Number=0;
  for (var s:String in warenkorb) {
    var id:String = warenkorb[s].produktID;
    var prod:Object = produkt[id];
    sum += warenkorb[s].anzahl * prod.preis;
  }
  return sum;
}
*** [edit]
es gibt natürlich immer gründe etwas anders zu machen, bzw. es gibt nicht eine lösung für alles, sondern für eine sache gibt es immer mehrere lösungen. kommt immer auf die umstände drauf an.
wenn man z.b. garantiert jedes produkt nur einmal kaufen kann (unterschiedliche anzahl, aber das produkt nur einmal) in diesem falle wäre objekt günstiger, da man dann wie bei den produkten auch nach der ID suchen kann. d.h. bei objekten lässt man flash suchen und braucht sich nicht selbst darum kümmern.
dito. das trennen von produktliste und warenkorb. wenn's nur einen käufer gibt und wenn die produktliste recht klein ist, dann braucht man das nicht unbedingt zu trennen. dann unterscheidet man in der spalte 'kaufanzahl'. alle haben die kaufanzahl=0 ausser denen, die man kaufen will. ist klar.

generell gilt die aussage: wenn's funktioniert fragt keiner mehr warum.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (30-12-2010 um 12:23 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 30-12-2010, 12:50   #8 (permalink)
Neuer User
 
Registriert seit: May 2009
Beiträge: 13
Ok, erst mal Danke.
Leider habe ich mich mit Objekten noch nicht befasst und aus diesem Grund auch Arrays gewählt ...
Dein Beispiel ist echt toll gemacht aber da muss ich mich erst mal durcharbeiten :-)

Darum hielt ich die Arrays für am besten geeignet:
Also der Kunde hat verschieden produkte zur Auswahl und klickt auf Warenkorb.
Das Produkt existiert zum Beispiel nur als Produktbez. "Vogalhaus in gelb".
Jetzt wir das in mein array_warenkorb[position0] geschrieben.
Er kauft sich noch das Vogelfutter -> wandert auch in warenkorb aber array_warenkorb[position+1].
Ein trace von [positon0] würde also Vogelhaus, Euro, Anzahl, Summe ergeben.
Ein trace von [positon1] würde also Fogelfutter, Euro, Anzahl, Summe ergeben.

Aufgrund der Anzahl [position+x] oder der ID/Produktbezeichnung wird dann je ein mc zur laufzeit erzeugt welcher alles nochmal darstellt und in welchem sich die Bestellmenge ändern lässt.

Dann wird nach klick auf bestellen alles in eine Email gepackt und versendet ...

Geändert von Adama74 (30-12-2010 um 13:15 Uhr)
Adama74 ist offline   Mit Zitat antworten
Alt 30-12-2010, 13:42   #9 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
"..Bei jedem Aufruf der Funktion soll überprüft werden ob wkproduktei schon existiert ..."

nochmal:
if (array_warenkorb.indexOf(wkproduktei) == -1 )
// das würde nur gehen, wenn dein array aus lauter wkproduktei bestehen würde. z.b.
array_warenkorb = [wkproduktei1, wkproduktei2, wkproduktei3, ..]

// dein array besteht aber aus lauter array's
array_warenkorb = [ [wkproduktei,..], [wkproduktei,..], [wkproduktei,..], ]

hier kannst du nicht mehr indexOf benützen, sondern du musst dir ein programm schreiben wie beispiel:
function addWarenkorb(id:String, anzahl:int):void {
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 30-12-2010, 14:59   #10 (permalink)
Neuer User
 
Registriert seit: May 2009
Beiträge: 13
Dann hatte ich wohl genau hier einen Denkfehler
bzw. das ganze falsch verstanden ...

Übrigens:
Hab mir die Seite in deiner Signatur angesehen.
Tolle Seite mit vielen Beispielen. Sehr hilfreich.
Adama74 ist offline   Mit Zitat antworten
Alt 20-05-2011, 19:47   #11 (permalink)
Neuer User
 
Registriert seit: Dec 2010
Beiträge: 50
wie kann ich diesen produktID löschen wie unten geht nicht ?

for (var s:String in warenkorb) {
if (warenkorb[s].produktID == id){
delete warenkorb[s].produktID;
// oder
delete warenkorb[s].id;

continue;
}
}


[QUOTE=hgseib;1970749hier kannst du nicht mehr indexOf benützen, sondern du musst dir ein programm schreiben wie beispiel:
function addWarenkorb(id:String, anzahl:int):void {[/QUOTE]
lupe ist offline   Mit Zitat antworten
Alt 21-05-2011, 13:32   #12 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Beiträge: 1.197
www.airdoc.be

Zitat:
Zitat von Adama74 Beitrag anzeigen
Leider finde ich die online Doku seit CS4 etwas ... gewöhnungsbedürftig
die Doku ging mir auch total auf die Nerven, das war früher besser. Aber probier mal www.airdoc.be Das ist eine AIR Anwendung, in die man kann sich auch noch andere Docs installieren (Papervision, PureMVC, etc.) Damit ist es fast wieder wie früher.
__________________
EDV = Ende Der Vernunft
hmpf ist offline   Mit Zitat antworten
Alt 21-05-2011, 13:52   #13 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Beiträge: 1.197
Zitat:
Zitat von lupe Beitrag anzeigen
wie kann ich diesen produktID löschen wie unten geht nicht ?

for (var s:String in warenkorb) {
if (warenkorb[s].produktID == id){
delete warenkorb[s].produktID;
// oder
delete warenkorb[s].id;

continue;
}
}
ActionScript:
  1. removeElement(s, warenkorb);
  2.  
  3. function removeElement(element:String, array:Array):void{
  4.             var i : int = array.indexOf(element); // index des elements bestimmen
  5.             if(i >= 0){ // wenn element gefunden
  6.                 array.splice(i, 1); // dann index entfernen
  7.             }
  8.         }
__________________
EDV = Ende Der Vernunft
hmpf ist offline   Mit Zitat antworten
Alt 21-05-2011, 15:41   #14 (permalink)
Neuer User
 
Registriert seit: Dec 2010
Beiträge: 50
das ist perpeckt !! muss jede probieren.
die online Doku von Adobe ging mir auch total auf die Nerven.

Zitat:
Zitat von hmpf Beitrag anzeigen
die Doku ging mir auch total auf die Nerven, das war früher besser. Aber probier mal www.airdoc.be Das ist eine AIR Anwendung, in die man kann sich auch noch andere Docs installieren (Papervision, PureMVC, etc.) Damit ist es fast wieder wie früher.
lupe ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
array, as3, durchsuchen, variable

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Variable mit php nach wort durchsuchen Hundertwasser Server-Seite allgemein 3 22-01-2006 14:51
Array nach spezifischem Wert durchsuchen Argh ActionScript 1 8 03-11-2004 16:46
Array: durchsuchen => Variable ändern johanness ActionScript 1 14 20-01-2004 17:37
array nach wort durchsuchen icf ActionScript 1 5 14-09-2002 20:48
db nach variable aus formular durchsuchen schorleschorsch Flash und Datenbanken 2 16-11-2001 10:06


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:08 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele