Esiste un metodo di giunzione per le stringhe?

La splice Javascript funziona solo con gli array. Esiste un metodo simile per le stringhe? O dovrei creare la mia funzione personalizzata?

I metodi substr() e substring() restituiranno solo la stringa estratta e non modificheranno la stringa originale. Quello che voglio fare è rimuovere parte della mia stringa e applicare la modifica alla stringa originale. Inoltre, il metodo replace() non funzionerà nel mio caso perché voglio rimuovere parti partendo da un indice e terminando in qualche altro indice, esattamente come quello che posso fare con il metodo splice() . Ho provato a convertire la mia stringa in un array, ma questo non è un metodo accurato.

È più veloce tagliare la stringa due volte, in questo modo:

 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); } 

che usare una divisione seguita da un join (metodo di Kumar Harsh), in questo modo:

 function spliceSplit(str, index, count, add) { var ar = str.split(''); ar.splice(index, count, add); return ar.join(''); } 

Ecco un jsperf che mette a confronto i due e un paio di altri metodi. (jsperf è inattivo da alcuni mesi. Si prega di suggerire alternative nei commenti).

Sebbene il codice sopra implementa funzioni che riproducono la funzionalità generale di splice , l'ottimizzazione del codice per il caso presentato dal richiedente (ovvero, l'aggiunta di nulla alla stringa modificata) non modifica le prestazioni relative dei vari metodi.

modificare

Questo ovviamente non è il modo migliore per “splicare” una stringa, ho dato questo come esempio di come sarebbe l’implementazione, che è imperfetto e molto evidente da uno split (), splice () e join (). Per un’implementazione di gran lunga migliore, vedi il metodo di Louis .


No, non esiste una String.splice , ma puoi provare questo:

 newStr = str.split(''); // or newStr = [...str]; newStr.splice(2,5); newStr = newStr.join(''); 

Mi rendo conto che non esiste alcuna funzione di splice come negli array, quindi è necessario convertire la stringa in un array. Difficoltà …

Ecco un piccolo Curry che offre una migliore leggibilità (IMHO):

La firma della seconda funzione è identica al metodo Array.prototype.splice .

 function mutate(s) { return function splice() { var a = s.split(''); Array.prototype.splice.apply(a, arguments); return a.join(''); }; } mutate('101')(1, 1, '1'); 

So che c’è già una risposta accettata, ma spero che questo sia utile.

Il metodo di risposta di Louis , come una funzione prototipo di String :

 String.prototype.splice = function(index, count, add) { if (index < 0) { index = this.length + index; if (index < 0) { index = 0; } } return this.slice(0, index) + (add || "") + this.slice(index + count); } 

Esempio:

  > "Held!".splice(3,0,"lo Worl") < "Hello World!" 

Vorrei offrire un’alternativa più semplice ai metodi Kumar / Cody e Louis. In tutti i test che ho eseguito, si comporta velocemente come il metodo di Louis (vedi i test di violino per i benchmark).

 String.prototype.splice = function(startIndex,length,insertString){ return this.substring(0,startIndex) + insertString + this.substring(startIndex + length); }; 

Puoi usarlo in questo modo:

 var creditCardNumber = "5500000000000004"; var cardSuffix = creditCardNumber.splice(0,12,'****'); console.log(cardSuffix); // output: ****0004 

Vedi i risultati dei test: https://jsfiddle.net/0quz9q9m/5/

Basta usare il substr per la stringa

ex.

 var str = "Hello world!"; var res = str.substr(1, str.length); 

Risultato = ciao mondo!