2017-03-20 3 views
0

Ich habe verschiedene verschiedene string.insert(i, s) Funktionen ausprobiert, aber keiner von ihnen hat mit der Schleife gearbeitet, die ich habe. Hier ist ein Beispiel meines Codes:Wie füge ich eine Zeichenfolge an einer bestimmten Stelle in einer anderen Zeichenfolge ein, die mit einer Schleife funktionieren soll?

var str = " absolutely pie"; 
var indices = [0, 12, 16]; // indices where I want to insert 
var things = ["I", "love", 1]; // things I want to insert 
for(var i = 0; i < indices.length; i++) { 
    str = str.splice(indices[i], 0, things[i]); 
} 

Dies funktioniert nicht. Es soll auszudrucken "Ich liebe absolut pIE1", sondern es ausdruckt:

"Ich absolutellove1y pie"

Sie können den Code here sehen.

Ich habe die meisten Beispiele aus this Frage ausprobiert.

Also, was ist das Problem (ist es wie die Insert-Methoden implementiert sind?), Und wie kann ich das beheben?

Antwort

0

Sie müssen die Anzahl der zusätzlichen things berücksichtigen, die bereits in Ihre string eingefügt wurden, indem Sie jedem Index i hinzufügen. Beachten Sie auch, dass Sie zu Beginn des Originals zu viele Leerzeichen haben string; Es sollte ' absolutely pie' statt 10 sein.

Stellen Sie sicher, dass Sie Ihre String in ein Array von Zeichen umwandeln (mit String#split), bevor Sie versuchen splice darauf zu nennen, weil splice funktioniert nur auf Arrays. Sie können dieses Array dann mithilfe von Array#join in eine Zeichenfolge zurückverwandeln.

var string = ' absolutely pie' 
 
var indices = [0, 12, 16] 
 
var things = ['I', 'love', 1] 
 

 
string = string.split('') 
 

 
things.forEach(function (e, i) { 
 
    string.splice(indices[i] + i, 0, e) 
 
}) 
 

 
string = string.join('') 
 

 
console.log(string) //=> 'I absolutely love pie1'

0

So ist Ihr Problem, dass der Indizes, mit denen Sie die ursprünglichen Zeichenfolge bezüglich starten. ‚1‘ im Index einfügen 16 Sinn zuerst macht, aber dann fügen Sie 5 weitere Zeichen, so dass Sie den aktuellen Index wollen, ist 21. Die einfache Lösung hier hinzuzufügen, ist ein Offset:

var str = " absolutely pie"; 
var indices = [0, 12, 16]; // indices where I want to insert 
var things = ["I", "love", "1"]; // things I want to insert 
var offset = 0; 
for(var i = 0; i < indices.length; i++) { 
    str = str.splice(indices[i] + offset, 0, things[i]); 
    offset += things[i].length 
} 

Das andere Problem ist, dass Wenn Ihr Ziel "I absolutely love pie1" ist, ersetzen Sie in einigen Fällen das Leerzeichen in der ursprünglichen Zeichenfolge und in anderen nicht. Meine Funktion mit 1 für die delCount Param testen, habe ich I absolutely lovepie1. Sie benötigen einen zusätzlichen "Ersatzplatz" zwischen "absolut" und "Kuchen", oder um ihn von Anfang an zu entfernen und 0 als delCount zu übergeben.

0

Sie berechnen die Indizes basierend auf der ursprünglichen Zeichenfolge, aber Sie müssen ihre Änderungen berücksichtigen, sie wächst mit fortschreitender Schleife.

einfach das zu indices Array ändern.

var indices = [0, 14, 22]; // indices where I want to insert 
+0

das ist in Ordnung, aber erfordert jeden neuen Index von Hand Berechnung (durch die Länge der vorherigen Zugabe 'thing' Warum verlassen, dass nicht an den Code? – xavdid

Verwandte Themen