Rabe: Ersatz für splice()?

Hallo,

ich suche einen Ersatz für die Methode splice(), mit der man aus einem Array ein *beliebiges* (also nicht nur das letzte) Element entfernen kann. Den Ersatz suche ich deshalb, weil u.a. der Mac-IE weder push() noch splice() implementiert hat, und ich keine Minderheiten-Diskriminierungen vorhabe.

Derowegen ist es notwendig, die splice()-Methode sozusagen von vorne bis hinten von Hand zu programmieren. Hat hier jemand ne Idee?

Thanks in advance.

Rabe

  1. Hallo Rabe,

    ich suche einen Ersatz für die Methode splice(), mit der man aus einem Array ein *beliebiges* (also nicht nur das letzte) Element entfernen kann. Den Ersatz suche ich deshalb, weil u.a. der Mac-IE weder push() noch splice() implementiert hat, und ich keine Minderheiten-Diskriminierungen vorhabe.

    Derowegen ist es notwendig, die splice()-Methode sozusagen von vorne bis hinten von Hand zu programmieren. Hat hier jemand ne Idee?

    ja aber sicher doch

    definiere eine Funktion, der du als Parameter das Array und den Schlüssel des zu entfernenden Elementes übergibst

    definiere in der Funktion eine lokale Variable vom Typ Array

    durchlaufe das übergebene Array mit einer for-in-Schleife

    prüfe ob der Schlüssel des durchlaufenden Elementes mit dem übergebenen Schlüssel übereinstimmt
    => wenn ja, beginne den nächsten Durchlauf
    => wenn nein, füge das Element dem vorher definierten lokalen Array zu
       bei indizierte Arrays als das nächste Element
       bei assoziativen Arrays erfolgt die Definition über den Schlüssel und den Wert

    gebe nach der Abarbeitung der Schleife das lokale Array zurück

    Viele Grüße

    Antje

    1. Hallo Antje Hofmann,

      danke für die grundlegenden Erklärungen. Danke auch an peterS. Durch die Links war ich schon ziemlich durch, und bin draus nicht richtig schlau geworden.

      Ich glaube ich bin schon recht nahe dran. Nur die Entfernung des richigen Elements will nicht so recht klappen.

      Hier mein jetziger (fünfter) Ansatz:

      function removeElem(str)
      {

      for(var i = 0; i < arr.length; i++)
       {
        if(arr[i] == str)
        {
         for(var j = 0; j < arr.length; j++)
         {
          arr[j] = arr[j + 1];
         }
         arr.length = arr.length - 1;
         break;
        }
       }
      }

      str wird übergeben, und arr (das indizierte Array) liegt als globale Variable vor.
      Leider wird durch den Ansatz nicht immer das richtige Element entfernt. Vielleicht kannst du mir nochmals auf die Sprünge helfen?

      Thanks

      Rabe

      1. hallo again Rabe,

        Hier mein jetziger (fünfter) Ansatz:

        function removeElem(str)
        {
        ...

        Dein ehrgeiz ehrt Dich;

        ... Durch die Links war ich schon ziemlich durch, und bin
        draus nicht richtig schlau geworden.

        das ist ueberhaupt kein problem -

        der code ist dazu da, einem js-client, der die von Dir
           nachgefragten Array-methoden nicht implementiert hat,
           genau diese beizubringen;

        moderne browser ignorieren diese nachhilfe;

        fueg die zeilen einfach Deinem bisherigen code
           hinzu, und Dir stehen fuer jeden js-faehigen
           client, der das Array-objekt kennt, die vorher
           so sehr vermissten methoden zur verfuegung;

        by(t)e by(t)e - peterS. - pseliger@gmx.net

        --
        sh:| fo:) ch:? rl:| br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)

  2. gruss Rabe

    http://www.google.de/search?q=%2Bjavascript+%2Bprototype+%2Barray+%2Bsplice&ie=ISO-8859-1&hl=de&meta=

    fuehrt Dich unter anderem auch auf:

    http://www.faqts.com/knowledge_base/view.phtml/aid/3838/fid/144

    viel spass und by(t)e by(t)e - peterS. - pseliger@gmx.net

    --
    sh:| fo:) ch:? rl:| br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)