Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 23-01-2004, 15:19   #1 (permalink)
Neuer User
 
Registriert seit: Sep 2001
Ort: Pfälzer Wald
Beiträge: 28
Question arrays abgleichen

ich brauch eine function, die mir möglichst elegant alle werte von zwei arrays abgleicht.

ergebnis soll ein neues array sein, dass nur die werte enthält, die in beiden arrays vorkommen.

beispiel:
ActionScript:
  1. var liste = new Array(1,2,3,4,5);
  2. var filter = new Array(2,3,6,9);
  3.  
  4. ergebnis = filterFuntion(liste, filter);

ergebnis ist jetzt [2,3]

bin sicher, ihr habt dazu was auf lager.
__________________
frohes kopieren und einfügen...
pumu ist offline   Mit Zitat antworten
Alt 23-01-2004, 15:46   #2 (permalink)
Farbe ist Luxus
 
Benutzerbild von ludabruda
 
Registriert seit: May 2003
Ort: Köln
Beiträge: 2.405
Hi,

ist eigentlich gar nicht so schwer.
Eine Möglichkeit wären zwei verschachtelte Schleifen.
Du gehst jeden Eintrag des ersten Arrays durch.
Für jeden Eintrag gehst du das zweite Array durch und fragst ab, ob das Element des ersten gleich dem des zweiten ist. Wenn ja, fügst du diesen Wert einem neuen, vorher erzeugten Array mittels push() hinzu.

Eine andere Möglichkeit (je nachdem schneller) wäre, eines der beiden Arrays in einen String umzuwandeln (Array.join()).
In einer Schleife fragst du für jedes Element des Arrays ab, ob es in dem String vorkommt (indexOf). bei true wieder push() ins neue Array.

Schau mal, ob du damit weiterkommst.

Grüße
Sascha
__________________
12:15, press return
ludabruda ist offline   Mit Zitat antworten
Alt 23-01-2004, 15:58   #3 (permalink)
Neuer User
 
Registriert seit: Sep 2001
Ort: Pfälzer Wald
Beiträge: 28
danke für die antwort.
hab's gleich mal ausprobiert:
ActionScript:
  1. arrayFiltern = function(liste, filter) {
  2.     var ergebnis = new Array();
  3.     filterString = filter.toString();
  4.     for (i=0; i<liste.length; i++) {
  5.         if (filterString.indexOf(liste[i]) != -1) {
  6.             ergebnis.push(liste[i]);
  7.         }
  8.     }
  9.     return ergebnis;
  10. }
  11.  
  12. var liste = new Array(1,2,3,4,5,6,7,9);
  13. var filter = new Array(2,3);
  14.  
  15. trace(arrayFiltern(liste, filter));
  16. //ausgabe: 2,3
  17.  
__________________
frohes kopieren und einfügen...
pumu ist offline   Mit Zitat antworten
Alt 23-01-2004, 16:38   #4 (permalink)
Neuer User
 
Registriert seit: Sep 2001
Ort: Pfälzer Wald
Beiträge: 28
hab noch einen entscheidenden bug gefunden:
wenn eine zahl aus 2 ziffern im filter auftaucht, produziert die bedingung mist.
beispiel: filter [2,3,11], liste[1,2,3]
ergebnis ist dann [1,2,3]

hier die korrigierte fassung:

ActionScript:
  1. arrayFiltern = function(liste, filter) {
  2.     var ergebnis = new Array();
  3.     filterString = filter.toString()+",";
  4.     for (i=0; i<liste.length; i++) {
  5.         //check ob liste[i] im string und ob trennzeichen nach fundstelle
  6.         if ((filterString.indexOf(liste[i]) != -1) && (filterString.charAt(filterString.indexOf(liste[i])+String(liste[i]).length) == ",")){
  7.             ergebnis.push(liste[i]);
  8.         }
  9.     }
  10.     return ergebnis;
  11. }
  12.  
  13. var liste = new Array(1,2,3,4,5,6,7,9);
  14. var filter = new Array(2,3,11);
  15.  
  16. trace("ergebnis: "+arrayFiltern(liste, filter));
  17. //ausgabe: 2,3
  18.  
vielleicht geht das ganze ja auch noch etwas schöner??
__________________
frohes kopieren und einfügen...
pumu ist offline   Mit Zitat antworten
Alt 24-01-2004, 17:26   #5 (permalink)
Neuer User
 
Registriert seit: Sep 2001
Ort: Pfälzer Wald
Beiträge: 28
mal wieder zeigt sich:
würde ich nach den richtigen stichworten suchen hätte ich gleich das perfekte script gefunden.

das beschriebene problem ist nichts anderes als die suche nach der schnittmenge zweier arrays.

die lösung:
array schnittmenge

thx flashforum
__________________
frohes kopieren und einfügen...
pumu ist offline   Mit Zitat antworten
Antwort

Lesezeichen

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 12:58 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele