Max: Ersetzen mit Array

Hallo!

Ich möchte zwei Arrays erstellen und dies dann miteinander ersetzen.

Beispiel:

var key = new Array("string1", "string2", "string3");
var value = new Array("ersatz1", "ersatz2", "ersatz3");

Nun sollen "string1" durch "ersatz1", "string2" durch "ersatz2" usw. ersetzt werden.

Hat jemand eine Idee, wie man das lösen könnte. Hatte schon einen Ansatz mittels for-Schleife, hat aber a) nicht richtig funktioniert und b) suche ich nach einer einfacheren Lösung.

In PHP ist dies bspw. sehr simpel.

Danke!

Max

  1. Hallo Max,

    Was ging daran nicht:

      
    var key = new Array("string1", "string2", "string3");  
    var value = new Array("ersatz1", "ersatz2", "ersatz3");  
    for(var i=0; i<key.length; i++)  
      key[i] = value[i];  
    alert(key.join(", "));  
    
    

    In PHP ist dies bspw. sehr simpel.

    In JavaScript ist es ganz sicher nichts anderes!

    Übrigens: value ist bereits ein Attribut Du solltest Dein Array lieber anders nennen.

    Mit freundlichem Gruß
    Micha

    --
    LeagueEditor JavaScript kostenlose Ligaverwaltung || richtig Messen will gelernt sein
    1. Hallo Max,

      Was ging daran nicht:

      var key = new Array("string1", "string2", "string3");
      var value = new Array("ersatz1", "ersatz2", "ersatz3");
      for(var i=0; i<key.length; i++)
        key[i] = value[i];
      alert(key.join(", "));

        
      Hallo!  
        
      Sorry, merke gerade, dass ich mich wohl falsch ausgedrückt habe. Das Problem ist, dass "string1" usw. in einem Text vorkommen und in diesem durch "ersatz1" usw. ersetzt werden sollen.
      
      1. Sorry, merke gerade, dass ich mich wohl falsch ausgedrückt habe. Das Problem ist, dass "string1" usw. in einem Text vorkommen und in diesem durch "ersatz1" usw. ersetzt werden sollen.

        Dann zeig doch mal wie du das ganz einfach mit PHP machst

        Struppi.

        --
        Javascript ist toll (Perl auch!)
      2. Hallo Max,

        Das Problem ist, dass "string1" usw. in einem Text vorkommen und in diesem durch "ersatz1" usw. ersetzt werden sollen.

        *lol* Okay, dann einfach so:

          
           var from = ['string1', 'string2', 'string3'];  
           var to = ['ersatz1', 'ersatz2', 'ersatz3'];  
           var str = 'string1 string3 string2, string3string2';  
          
           for (var i=0; i<from.length; i++){  
            myRegExp = new RegExp(from[i],"g");  
            str = str.replace(myRegExp, to[i]);  
           }  
           alert(str);
        

        Mit freundlichem Gruß
        Micha

        --
        LeagueEditor JavaScript kostenlose Ligaverwaltung || richtig Messen will gelernt sein
    2. Hallo derletztekick.

      Was ging daran nicht:

      var key = new Array("string1", "string2", "string3");
      var value = new Array("ersatz1", "ersatz2", "ersatz3");
      for(var i=0; i<key.length; i++)
        key[i] = value[i];
      alert(key.join(", "));

        
      Oder so:  
        
      ~~~javascript
      var from = ['string1', 'string2', 'string3'];  
      var to = ['ersatz1', 'ersatz2', 'ersatz3'];  
        
      if (from.length == to.length) { // Sonst könnte es zu Problemen kommen  
        
        for(var i = 0; i < to.length; ++i) {  
        
          from[i] = to[i];  
        
        }  
        
        alert(from.join(', '));  
        
      }
      

      Könnte es aber nicht sein, dass Max eigentlich innerhalb einer Zeichenkette die Werte des einen durch die Werte des anderen Arrays ersetzen möchte? Denn obiges ergibt für mich keinen Sinn.

      Einen schönen Mittwoch noch.

      Gruß, Mathias

      --
      sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
      „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
      [HTML Design Constraints: Logical Markup]
    3. Hallo!

      for(var i=0; i<key.length; i++) {
              text = text.replace(key[i], replaceStrings[i]);
          }

      damit funktioniert es, allerdings nur EINMALIG. Wenn "string1" mehrmals im Text vorkommt, wird nur das erste Vorkommen ersetzt. Was kann ich da machen?

      Vielen Dank!

      1. Hallo Max.

        for(var i=0; i<key.length; i++) {
                text = text.replace(key[i], replaceStrings[i]);
            }

        damit funktioniert es, allerdings nur EINMALIG. Wenn "string1" mehrmals im Text vorkommt, wird nur das erste Vorkommen ersetzt. Was kann ich da machen?

        So zum Beispiel:

        function js_str_replace(mix1, mix2, str) {  
          
          // Wenn die ersten beiden Argumente Arrays sind …  
          if (typeof(mix1) == 'object' && mix1.length &&  
              typeof(mix2) == 'object' && mix2.length) {  
          
            // … und beide gleich viele Elemente enthalten …  
            if (mix1.length == mix2.length) {  
          
              for (var i = 0; i < mix1.length; ++i) {  
          
                // … sämtliche Vorkommen global ersetzen …  
                str = str.replace(new RegExp(mix1[i], 'g'), mix2[i]);  
          
              }  
          
              // … und Resultat zurückgeben.  
              return str;  
          
            } else {  
          
              // Mit einer ungleichen Anzahl kann nicht gearbeitet werden.  
              return false;  
          
            }  
          
          }  
          
          // Ansonsten global ersetzen  
          return (str = str.replace(new RegExp(mix1, 'g'), mix2));  
          
        }  
          
        var from = ['string1', 'string2', 'string3'];  
        var to = ['ersatz1', 'ersatz2', 'ersatz3'];  
          
        alert(js_str_replace(from, to, 'string1 string3 string2, string3string2')); // ersatz1 ersatz3 ersatz2, ersatz3ersatz2
        

        Einen schönen Mittwoch noch.

        Gruß, Mathias

        --
        sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
        „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
        [HTML Design Constraints: Logical Markup]
        1. Hallo nochmal.

          Wenn "string1" mehrmals im Text vorkommt, wird nur das erste Vorkommen ersetzt. Was kann ich da machen?

          So zum Beispiel:

          So viel zur Quick-and-Dirty-Lösung. Nun eine vermeintlich bessere:

          function js_str_replace(mix1, mix2, str) {  
            
            // Die ersten beiden Argumente müssen Arrays sein …  
            if (typeof(mix1) == 'object' && mix1.[ref:self811;javascript/objekte/array.htm#length@title=length] &&  
                typeof(mix2) == 'object' && mix2.length) {  
            
              // … und die Anzahl ihrer Elemente muss übereinstimmen  
              if (mix1.length == mix2.length) {  
            
                // Alle Elemente durchlaufen  
                for (var i = 0; i < mix1.length; ++i) {  
            
                  // Bei jedem Element einmalig bei 0 anfangen  
                  var offset = 0;  
                  // Das erste Vorkommen suchen  
                  var found = str.indexOf(mix1[i], offset);  
            
                  // Solange Vorkommen gefunden  
                  while (found != -1) {  
            
                    // Teilzeichenkette davor …  
                    var before = str.[ref:self811;javascript/objekte/string.htm#substring@title=substring](0, found);  
                    // … und danach extrahieren  
                    var after = str.[ref:self811;javascript/objekte/string.htm#substr@title=substr](before.length + mix1[i].length);  
            
                    // Startpunkt erhöhen, sonst gibts eine nette Endlosschleife  
                    offset = ++found;  
                    // Nächstes Vorkommen suchen  
                    found = str.indexOf(mix1[i], offset);  
            
                    // Teilzeichenkette vorher mit Ersetzung und Teilzeichenkette nachher zusammensetzen  
                    str = before + mix2[i] + after;  
            
                  }  
            
                }  
            
                // Am Ende aller Ersetzungen zurückgeben  
                return str;  
            
              } else {  
            
                // Die Anzahl der Elemente muss definitiv gleich sein  
                return false;  
            
              }  
            
            }  
            
            // Siehe oben  
            var offset = 0;  
            var found = str.indexOf(mix1, offset);  
            
            while (found != -1) {  
            
              var before = str.substring(0, found);  
              var after = str.substr(before.length + mix1.length);  
            
              offset = ++found;  
              found = str.indexOf(mix1, offset);  
            
              str = before + mix2 + after;  
            
            }  
            
            return str;  
            
          }  
            
          var from = ['string1', 'string2', 'string3'];  
          var to = ['ersatz1', 'ersatz2', 'ersatz3'];  
          var str = 'string1 string3 string2, string3string2';  
            
          alert(js_str_replace(from, to, str)); // ersatz1 ersatz3 ersatz2, ersatz3ersatz2  
            
          alert(js_str_replace('foo', 'bar', 'Lesfoo')); // Lesbar
          

          „Vermeintlich“, weil die while-Schleife zum Auffinden aller Vorkommen zweimal notiert werden muss, was mir jedoch gar nicht gefällt.

          Einen schönen Mittwoch noch.

          Gruß, Mathias

          --
          sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
          „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
          [HTML Design Constraints: Logical Markup]