Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 17-01-2009, 17:39   #1 (permalink)
Neuer User
 
Benutzerbild von mocomatics.de
 
Registriert seit: Jul 2004
Beiträge: 6
Lightbulb grundverständnisproblem: Array-Filter-Funktionen

Hallo verehrtes Flashforum:

nur eine kurze Frage:
Wie kann ich der Funktion "hasSkillID" die variable "id" übergeben, ohne sie umständlicherweise der Variable _currentID zuzuweisen? _currentID wurde im Kopf definiert, liegt also im Scope der gesamten Klasse, was aber eigentlich doch nicht nötig sein sollte.

hier der Code ausschnitt
PHP-Code:
public function hasSkill(id:int):Boolean{
            
            var 
report:Boolean;
            
_currentID id;
            
//geht _ConnectionsArray durch, und guckt, ob entsprechender Skill vorhanden
            
report _Connections.some(hasSkillID);
            
trace (this.name+" has SkillID "+_currentID": "+report);
            return 
report;
        }
        
        private function 
hasSkillID(obj:Object,index:int,arr:Array):Boolean {
            return 
obj._SkillID == _currentID;
        } 
und 2.
noch eine kleine Anhängselfrage:
Sind die Array-Methoden schneller als while-Schleifen mit kombinierten IF-Abfragen?
wie zB:
PHP-Code:
function getMember(id:int):FEMember {
            
//trace ('getMember: id: '+id);
            
            
var i:int=0;
            var 
returnMember:FEMember;
            while (
i<MembersArray.length) {
                
//trace ( 'getMember: MembersArray[i]:' + MembersArray[i].ID)
                
if (Number(MembersArray[i].ID)==id) {
                    
returnMember=MembersArray[i];
                    break;
                    
//trace ('getMember: returnMember gefunden: '+returnMember);
                
} else {
                    
returnMember=null;
                }
                
i++;
            }
            return 
returnMember;
        } 
Ich danke euch für eure Antworten.

Moc
mocomatics.de ist offline   Mit Zitat antworten
Alt 17-01-2009, 18:39   #2 (permalink)
vermisst ein e
 
Benutzerbild von kRizzl
 
Registriert seit: Oct 2007
Beiträge: 774
die obere funktion wuerd ich ohne den umweg ueber some() ausfuehren.. some() macht in meinen augen nur sinn, wenn man alle parameter wirklich braucht und man nur nen kurzen vergleich reinpackt.

also ich wuerds wie in deinem unteren codebeispiel machen, nur bedeutend kuerzer:
ActionScript:
  1. public function findMember(array:Array, idToFind:int)
  2. {
  3.   for(var i:int=0;i<array.length;i++)
  4.     if(array[i].id == idToFind)
  5.       return array[i];
  6.  
  7.   return null;
  8. }
(zur erklaerung: egal wann ein return in einer funktion erreicht wird, bricht diese dort ab und liefert den nachstehenden wert zurueck. der code danach wird also nicht ausgefuehrt.. dann brauchst du zb auch kein break mehr.)

zu der performance-frage: da tut sich hoechstwahrscheinlich ueberhaupt nix, weil der flaschenhals nicht der funktionsaufruf ist, sondern der funktionsrumpf selber. und da steht in beiden faellen eigenproduziertes actionscript.
wenn du aber zb die native Array.indexOf()-funktion mit einer selbstgeschriebenen vergleichen wuerdest, duerften sich da schon unterschiede auftun, da die native wahrscheinlich nich auf unoptimiertem, lahmem actionscript ausgefuehrt wird
__________________
krisrok.de

Geändert von kRizzl (17-01-2009 um 18:41 Uhr)
kRizzl ist offline   Mit Zitat antworten
Alt 17-01-2009, 19:05   #3 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.347
ganz kurz und mit einer schnellen for i in schleife

PHP-Code:
public function findMember( array:Array, idToFind:int ) {
    
    for ( var 
str:String in array ) if ( array[ str ].ID == idToFind ) return array[ str ];

    return 
null;


cheers, sal
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.
Chuck Norris hat den Flash Player für alle mobilen Betriebssysteme!
salazar ist offline   Mit Zitat antworten
Alt 17-01-2009, 20:23   #4 (permalink)
Neuer User
 
Benutzerbild von mocomatics.de
 
Registriert seit: Jul 2004
Beiträge: 6
Thumbs up thx

wow, danke!

@kRizzl:

danke für die ausführlichen erläuterungen und die blitz-antwort!

@salazar:

alter schwede...ein zweizeiler!
das wär was für http://www.25lines.com/?page_id=139

Welche Bewandnis hat der Typ "String" in der for-Schleife? Wie hängt das mit dem Inhalt des Arrays zusammen?

und:
kann man diese platzsparende schreibweise auch für eine Filterfunktion benützen?
Im Moment wird durchs return abgebrochen, sobald der if-clause "true" zurückgibt. Wie schreib ich das, wenn's mehrere Elemente gibt, die zu filtern sind? Meine Lösung wäre einen Sammelarray zu definieren und mittels "push" die Elemente hinzuzufügen. Aber das klingt nicht sonderlich elegant.

nochmal: Hut ab...
mocomatics.de ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
array, array-methode, array.filter, array.some

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



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

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


Copyright ©1999 – 2012 Marc Thiele