javascript - Finns det en splice-metod för strängar?
Javascript splice fungerar endast med arrays. Finns det en liknande metod för strängar? Eller bör jag skapa min egen anpassade funktion?
substr()- och substring()-metoderna returnerar endast den extraherade strängen och modifierar inte den ursprungliga strängen. Det jag vill göra är att ta bort en del av min sträng och tillämpa ändringen på den ursprungliga strängen. Dessutom fungerar inte metoden replace() i mitt fall eftersom jag vill ta bort delar som börjar vid ett index och slutar vid ett annat, precis som jag kan göra med splice()-metoden. Jag försökte konvertera min sträng till en array, men detta är inte en smidig metod.
Svar #1
Det är snabbare att dela upp strängen två gånger, på det här sättet:
function spliceSlice(str, index, count, add) {
// We cannot pass negative indexes directly to the 2nd slicing operation.
if (index < 0) {
index = str.length + index;
if (index < 0) {
index = 0;
}
}
return str.slice(0, index) + (add || "") + str.slice(index + count);
}
än att använda en split följt av en join (Kumar Harshs metod), så här:
function spliceSplit(str, index, count, add) {
var ar = str.split('');
ar.splice(index, count, add);
return ar.join('');
}
Här är en jsperf som jämför de två och ett par andra metoder. (jsperf har varit nere i några månader nu. Vänligen föreslå alternativ i kommentarerna.)
Även om koden ovan implementerar funktioner som återskapar allmän funktionalitet hos splice, förändrar optimering av koden för det fall som frågeställaren presenterade (det vill säga att inte lägga till något i den modifierade strängen) inte den relativa prestandan hos de olika metoderna.
Svar #2
Redigera
Detta är förstås inte det bästa sättet att "splittra" en sträng, jag hade gett detta som ett exempel på hur implementeringen skulle vara, vilket är bristfälligt och mycket tydligt från en split(), splice() och join(). För en mycket bättre implementering, se Louis metod.
Nej, det finns inget som heter String.splice, men du kan prova detta:
newStr = str.split(''); // or newStr = [...str];
newStr.splice(2,5);
newStr = newStr.join('');
Jag inser att det inte finns någon splice-funktion som i arrayer, så du måste konvertera strängen till en array. Otur...
