2010-12-06 9 views

Respuesta

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

Para cadenas largas, esta solución es más rápida (porque copia menos) que la solución de nickf. – pts

+23

Esta solución no es más rápida. Tenía curiosidad por esto y ejecuté un jsperf. Esta es una nota para cualquiera que lea esto en el futuro. http://jsperf.com/javascript-string-splice. Probado en los últimos FF/Chrome/IE10/IE9. Usaría el enfoque de Lean nickf sobre este para claridad y rendimiento. – junkyspace

+3

Bueno, eso es muy posible. La respuesta aquí es de casi 3 años, la mayoría de los navegadores y versiones de esa época, de hecho se comportaron mucho más rápido con un * Array * join (especialmente IE). – jAndy

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

Según @junkyspace https: //jsperf.com/javascript-string-splice, esta respuesta es ** 640x más rápido ** que la de jAndy. –

1

Bueno solo un pequeño cambio porque las salidas solución anterior

"Quiero unaManzana"

en lugar de

"Quiero una manzana"

Para obtener la salida como

"Quiero una manzana"

utilizar el siguiente código modificado

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

sí, probablemente no sea deseable en * este * caso, pero agregar un espacio adicional automáticamente es casi definitivamente no deseable en * todos * casos. – nickf

+8

No serían las soluciones correctas para agregar los espacios en la cadena = 'an', de esta manera puede reutilizar la función – Tosh

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

Esto sería más lento, pero se hará cargo de la adición de espacio antes y después de la una Además, usted tendrá que cambiar el valor de la posición (a 2, que es más intuitivo ahora)

25

puede añadir esta función a la clase cadena

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

para que pueda usarlo en cualquier objeto de cadena:

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

Tal vez yo t es incluso mejor si se determina posición usando indexOf() así:

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

continuación, llamar a la función como esta:

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

Nota, que puse un espacio después del "una "en la llamada de función, en lugar de en la declaración de devolución.

+1

Esto no es lo que se pidió. Incluso si este fuera el caso, esto no funcionaría si tiene múltiples ocurrencias de la subcadena "at" – elachell

2

La biblioteca Underscore.String tiene una función que hace Insert

inserto (cadena, índice, subcadena) => string

como tan

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

¿por qué se bajó esta respuesta? – svarog

Cuestiones relacionadas