2010-12-06 19 views

Antwort

258

var a = "I want apple"; 
 
var b = "an"; 
 
var position = 6; 
 
var output = [a.slice(0, position), b, a.slice(position)].join(''); 
 
console.log(output);

+3

Bei langen Strings ist diese Lösung schneller (weil sie weniger kopiert) als die Lösung von Nickf. – pts

+23

Diese Lösung ist nicht schneller. Ich war neugierig und lief ein JSperf. Dies ist eine Notiz für jeden, der dies in der Zukunft liest. http://jsperf.com/javascript-string-splice. Getestet in neuesten FF/Chrome/IE10/IE9. Ich würde Lean Nickf Ansatz für Klarheit und Leistung verwenden. – junkyspace

+3

Nun, das ist sehr gut möglich. Die Antwort hier ist fast 3 Jahre alt, die Mehrheit der Browser und Versionen damals, tatsächlich viel schneller mit einem * Array * Join (vor allem IE). – jAndy

149
var output = a.substr(0, position) + b + a.substr(position); 
+21

Nach @junkyspace https: //jsperf.com/javascript-string-splice, diese Antwort ist ** 640x schneller ** als jAndy's. –

1

Nun nur eine kleine Änderung, weil die oben genannten Lösung Ausgänge

"Ich will anapple"

statt

"Ich möchte einen Apfel"

Um die Ausgabe als

"Ich möchte einen Apfel"

zu erhalten Verwenden Sie den folgenden geänderten Code

var output = a.substr(0, position) + " " + b + a.substr(position); 
+8

Ja, es ist wahrscheinlich nicht wünschenswert in * diesem * Fall, aber das automatische Hinzufügen eines zusätzlichen Speicherplatzes ist in * allen * Fällen fast definitiv nicht wünschenswert. – nickf

+8

Wäre es nicht die richtige Lösung, die Leerzeichen im String = 'an' hinzuzufügen, so können Sie die Funktion wiederverwenden – Tosh

1
var array = a.split(' '); 
array.splice(position, 0, b); 
var output = array.join(' '); 

Dies wäre langsamer, wird aber von der Zugabe von Raum sorgen vor und nach der einen Sie werden auch den Wert der Position ändern müssen (bis 2, es ist jetzt noch intuitiver)

25

Sie können diese Funktion auf String-Klasse

String.prototype.insertAt=function(index, string) { 
    return this.substr(0, index) + string + this.substr(index); 
} 

so hinzufügen, dass Sie es auf jedem String-Objekt verwenden können:

var myString = "abcd"; 
myString.insertAt(1, "XX"); 
4

i Vielleicht t ist sogar besser, wenn Sie Position mit indexOf() wie folgt ermitteln:

function insertString(a, b, at) 
{ 
    var position = a.indexOf(at); 

    if (position !== -1) 
    { 
     return a.substr(0, position) + b + a.substr(position);  
    } 

    return "substring not found"; 
} 

dann rufen Sie die Funktion wie folgt aus:

insertString("I want apple", "an ", "apple"); 

Beachten Sie, dass ich einen Raum setzen nach dem „ein "im Funktionsaufruf und nicht in der Rückgabeanweisung.

+1

Dies ist nicht das, worum es gebeten wurde. Selbst wenn dies der Fall wäre, würde dies nicht funktionieren, wenn Sie mehrfach den "at" Teilstring haben. – elachell

2

Die Underscore.String Bibliothek hat eine Funktion, die Insert tut

Einsatz (string, index, Teilzeichenfolge) => string

wie so

insert("Hello ", 6, "world"); 
// => "Hello world" 
+0

Warum wurde diese Antwort heruntergestimmt? – svarog

Verwandte Themen