Wie kann ich eine Zeichenfolge an einem bestimmten Index einer anderen Zeichenfolge einfügen?
var txt1 = "foo baz"
Angenommen, ich möchte nach dem "foo" "bar" einfügen. Wie kann ich das erreichen?
Ich dachte daran substring()
, aber es muss einen einfacheren und direkteren Weg geben.
javascript
string
Jiew Meng
quelle
quelle
Antworten:
Sie könnten Ihren eigenen Prototyp
splice()
in String erstellen.Polyfill
Beispiel
BEARBEITEN: Es wurde geändert, um sicherzustellen, dass dies
rem
ein absoluter Wert ist.quelle
slice
Lösung ist besser und einfacher. (Splice ist destruktiv, Slice nicht, und es ist besser zu vermeiden, "Objekte, die Sie nicht kennen" zu ändern.) Diese Lösung sollte absolut nicht die erste sichtbare Antwort sein, auch wenn sie zu diesem Zeitpunkt möglicherweise sinnvoll war.my_array[my_array.length] = item
alsmy_array.push(item)
?splice
In diesem Fall haben Sie Recht . in der Tat sind Saiten unveränderlich. Aus diesem Grund halte ich es jedoch fürsplice
eine schlechte Schlüsselwortwahl. Mein Hauptargument ist, Prototypen willkürlich zu erweitern, es sei denn, es handelt sich um Standard-Polyfills.Das Einfügen an einem bestimmten Index (anstatt beispielsweise am ersten Leerzeichen) muss String Slicing / Teilstring verwenden:
quelle
substring
wäre hier in Ordnung. Ich bevorzugeslice
im Allgemeinen, weil es flexibler ist (z"foo baz".slice(1, -2)
. B. negative Indizes ). Es ist auch etwas kürzer, für die kleinen, die es wert sind.`${txt1.slice(0,3)}bar${txt1.slice(3)}`
delete
Funktion nicht verwendet . Top-Antwort ...Hier ist eine Methode, die ich geschrieben habe und die sich wie alle anderen Programmiersprachen verhält:
Referenz:
quelle
{}
den if-else-Blöcken geschweifte Klammern hinzufügen .else
ist überflüssig.Machen Sie einfach die folgende Funktion:
und dann benutze es so:
Ausgabe: foo bar baz
Es verhält sich genau wie der C # (Sharp) String.Insert (int startIndex, String-Wert).
HINWEIS: Diese Insert - Funktion fügt der String - Wert (dritte Parameter) vor dem angegebenen Integer - Index (zweiter Parameter) im String str (erster Parameter), und dann die neue Zeichenfolge zurück ohne Änderung str !
quelle
UPDATE 2016: Hier ist eine weitere nur zum Spaß (aber ernsthafter!) Prototypfunktion, die auf einem Einzeiler-
RegExp
Ansatz basiert (mit aktivierterundefined
oder negativer Unterstützung im Vorfeldindex
):Vorherige (zurück bis 2012) Just-for-Fun- Lösung:
quelle
Wenn jemand nach einer Möglichkeit sucht, Text an mehreren Indizes in eine Zeichenfolge einzufügen, probieren Sie Folgendes aus:
Sie können dies beispielsweise verwenden, um
<span>
Tags an bestimmten Offsets in eine Zeichenfolge einzufügen :quelle
6: "<span>"
sagt: Geben Sie bei Index 6 den Text "<span>" ein. Wollen Sie damit sagen, dass Sie den Wert einer Ganzzahlvariablen als Einfügeindex verwenden möchten? Wenn das der Fall ist, versuchen Sie etwas wievar a=6, text = {}; text[a] = "<span>";
Dies ist im Grunde das, was @ Bass33 tut, außer dass ich auch die Option gebe, einen negativen Index zu verwenden, um vom Ende an zu zählen. Ein bisschen wie es die substr-Methode erlaubt.
Anwendungsfall: Nehmen wir an, Sie haben Bilder in voller Größe unter Verwendung einer Namenskonvention, können die Daten jedoch nicht aktualisieren, um auch Miniaturansichten für Miniaturansichten bereitzustellen.
quelle
Anhand Ihres aktuellen Beispiels könnten Sie das Ergebnis entweder durch erzielen
oder
Da Sie jedoch solche Annahmen treffen können, können Sie auch direkt zu Gullens Beispiel springen.
In einer Situation, in der Sie wirklich keine anderen Annahmen als zeichenindexbasiert treffen können, würde ich mich wirklich für eine Teilstring-Lösung entscheiden.
quelle
https://jsfiddle.net/gaby_de_wilde/wz69nw9k/
quelle
Ich weiß, dass dies ein alter Thread ist, aber hier ist ein wirklich effektiver Ansatz.
Das Schöne daran ist, dass es den Knoteninhalt erzwingt. Wenn sich dieser Knoten bereits im DOM befindet, müssen Sie keine Abfrageselektoren verwenden oder den innerText aktualisieren. Die Änderungen würden sich aufgrund ihrer Bindung widerspiegeln.
Wenn Sie eine Zeichenfolge benötigen, greifen Sie einfach auf die Textinhalteigenschaft des Knotens zu.
quelle
Nun, wir können sowohl die Teilstring- als auch die Slice-Methode verwenden.
Das einzige Problem einer Teilstring-Methode ist, dass sie mit einem negativen Index nicht funktioniert. Es wird immer der String-Index von der 0. Position genommen.
quelle
Für Sie wäre es also so
insertString("foo baz", "bar", 3);
Natürlich wäre dies eine Farbe, die Sie verwenden müssen, da Sie der Funktion jedes Mal Ihre Zeichenfolge zuweisen müssen, aber im Moment weiß ich nicht, wie ich es zu etwas Einfacherem wie einem machen kann
string.replace(insertion, place)
. Die Idee bleibt jedoch bestehen.quelle
Sie können reguläre Ausdrücke mit einem dynamischen Muster verwenden.
Ausgänge:
Dies ersetzt
text.length
Leerzeichen am Anfang der Zeichenfolgeoutput
. DasRegExp
bedeutet^\
- Zeilenanfang ein\s
beliebiges Leerzeichen{n}
, in diesem Fall mehrmals wiederholttext.length
. Verwenden Sie diese Option\\
,\
um Backslashes zu vermeiden, wenn Sie diese Art von Mustern aus Zeichenfolgen erstellen.quelle
eine andere Lösung, schneiden Sie die Schnur in 2 und legen Sie eine Schnur dazwischen.
quelle
Sie können dies problemlos mit regulärem Ausdruck in einer Codezeile tun
"Hallo schöne RegExp!"
quelle
Slice verwenden
Sie können verwenden
slice(0,index) + str + slice(index)
. Oder Sie können eine Methode dafür erstellen.Spleißmethode für Strings
Sie können
split()
die Hauptzeichenfolge hinzufügen und dann normal verwendensplice()
Anwenden von splice () auf mehrere Indizes
Die Methode verwendet ein Array von Arrays, wobei jedes Element des Arrays ein einzelnes darstellt
splice()
.quelle
Ich wollte die Methode mit Teilzeichenfolge und die Methode mit Slice von Base33 bzw. user113716 vergleichen, um dies zu tun, schrieb ich etwas Code
Schauen Sie sich auch diesen Leistungsvergleich an, Teilzeichenfolge, Slice
Der von mir verwendete Code erstellt große Zeichenfolgen und fügt die Zeichenfolge "bar" mehrmals in die große Zeichenfolge ein
Der allgemeine Leistungsunterschied ist bestenfalls gering und beide Methoden funktionieren einwandfrei (auch bei Saiten mit einer Länge von ~ ~ 12000000).
quelle
Dieser Ansatz bietet zwei Vorteile:
quelle