459 Stimmen

Einfügen einer Zeichenkette an einem bestimmten Index

Wie kann ich eine Zeichenfolge an einem bestimmten Index einer anderen Zeichenfolge einfügen?

 var txt1 = "foo baz"

Angenommen, ich möchte "bar" nach "foo" einfügen, wie kann ich das erreichen?

Ich dachte an substring() aber es muss doch einen einfacheren und direkteren Weg geben.

581voto

Tim Down Punkte 304837

Beim Einfügen an einem bestimmten Index (und nicht z. B. am ersten Leerzeichen) muss ein String-Slicing/Substring verwendet werden:

var txt2 = txt1.slice(0, 3) + "bar" + txt1.slice(3);

298voto

user113716 Punkte 309387

Sie könnten Ihren eigenen Prototyp erstellen splice() in String umgewandelt.

Polyfill

if (!String.prototype.splice) {
    /**
     * {JSDoc}
     *
     * The splice() method changes the content of a string by removing a range of
     * characters and/or adding new characters.
     *
     * @this {String}
     * @param {number} start Index at which to start changing the string.
     * @param {number} delCount An integer indicating the number of old chars to remove.
     * @param {string} newSubStr The String that is spliced in.
     * @return {string} A new string with the spliced substring.
     */
    String.prototype.splice = function(start, delCount, newSubStr) {
        return this.slice(0, start) + newSubStr + this.slice(start + Math.abs(delCount));
    };
}

Beispiel

String.prototype.splice = function(idx, rem, str) {
    return this.slice(0, idx) + str + this.slice(idx + Math.abs(rem));
};

var result = "foo baz".splice(4, 0, "bar ");

document.body.innerHTML = result; // "foo bar baz"

EDITAR: Geändert, um sicherzustellen, dass rem ist ein absoluter Wert.

159voto

Base33 Punkte 3069

Hier ist eine Methode, die ich geschrieben habe und die sich wie alle anderen Programmiersprachen verhält:

String.prototype.insert = function(index, string) {
  if (index > 0) {
    return this.substring(0, index) + string + this.substr(index);
  }

  return string + this;
};

//Example of use:
var something = "How you?";
something = something.insert(3, " are");
console.log(something)

Referenz:

92voto

Machen Sie einfach die folgende Funktion:

function insert(str, index, value) {
    return str.substr(0, index) + value + str.substr(index);
}

und verwenden Sie es dann so:

alert(insert("foo baz", 4, "bar "));

Ausgabe: foo bar baz

Es verhält sich genau so, wie der C# (Sharp) String.Insert(int startIndex, string value).

HINWEIS: Diese Einfügefunktion fügt die Zeichenkette Wert (dritter Parameter) vor die angegebene ganze Zahl Index (zweiter Parameter) in der Zeichenfolge str (erster Parameter), und gibt dann die neue Zeichenkette zurück, ohne die str !

19voto

Ryan Ore Punkte 1237

Dies ist im Grunde tun, was @Base33 tut, außer ich gebe auch die Möglichkeit der Verwendung eines negativen Index vom Ende zu zählen. Ähnlich wie die substr-Methode erlaubt.

// use a negative index to insert relative to the end of the string.

String.prototype.insert = function (index, string) {
  var ind = index < 0 ? this.length + index  :  index;
  return  this.substring(0, ind) + string + this.substr(ind);
};

Beispiel: Nehmen wir an, Sie haben Bilder in voller Größe und verwenden eine Namenskonvention, können aber die Daten nicht aktualisieren, um auch die URLs der Miniaturbilder bereitzustellen.

var url = '/images/myimage.jpg';
var thumb = url.insert(-4, '_thm');

//    result:  '/images/myimage_thm.jpg'

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X