Diferencia entre slice,substring y substr [javascript]

Iniciado por TØtti, 26 Abril 2017, 14:27 PM

0 Miembros y 1 Visitante están viendo este tema.

TØtti

Hola comunidad. Realmente no entiendo cual es la diferencia de esas tres funciones, que al parecer en la práctica funcionan igual (slice,substring,substr), pero lo dudo ya que por algo están. ¿Alguien me podría explicar?

Por cierto, el siguiente código no lo logro entender, yo sé para que sirve pero no como se ejecuta (tal vez por mi primera duda):

Código (javascript) [Seleccionar]
function reemplazarCadena(cadenaVieja, cadenaNueva, cadenaCompleta)
{
// Reemplaza cadenaVieja por cadenaNueva en cadenaCompleta

  for (var i = 0; i < cadenaCompleta.length; i++)
{
      if (cadenaCompleta.substring(i, i + cadenaVieja.length) == cadenaVieja)
{

           cadenaCompleta =  cadenaCompleta.substring(0, i) + cadenaNueva + cadenaCompleta.substring(i + cadenaVieja.length, cadenaCompleta.length);
      }
  }
  return cadenaCompleta;
}


//reemplazarCadena("Mundo", "Web", "Bravo Nuevo Mundo");


Gracias de antemano.


engel lex

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.


engel lex

extiende tu pregunta, que no entiendes de ellos? XD porque simplemente te van a repetir lo que ya dicen los documentos
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

#!drvy

#4
slice y substring funcionan de manera diferente internamente pero en la practica devuelven el mismo resultado con algunas excepciones bastante raras (navegadores diferentes).

La diferencia entre substring y substr es el segundo parámetro. En substring, es el index (o numero de carácter) sobre el que parar. En substr, el segundo parámetro es la longitud máxima de la cadena a devolver.

Dicho esto, lo recomendable de todas ellas es usar slice o substr.




Respecto a tu segunda duda... lo que hace es reemplazar una cadena por otra, dentro de un texto.

Linea 5: Por cada carácter de la cadena completa...
Linea 7: Si dicho carácter + los caracteres que siguen (durante la longitud de la cadenaVieja) son iguales a cadenaVieja...
Linea 10: CadenaCompleta es igual a cadenaCompleta hasta donde encontramos el primer carácter de cadenaVieja + cadenaNueva + cadenaCompleta desde donde encontramos el ultimo carácter de cadenaVieja.

Todo esto se basa en un index de caracteres dentro de cadenas de texto.

Supongamos que tienes la cadena: hola mundo
Los index serian respectivamente:


0 = h
1 = o
2 = l
3 = a
4 =
5 = m
6 = u
7 = n
8 = d
9 = o


Empieza desde el 0 porque todo en la informática empieza desde 0. En algunas ocasiones, un caracter puede equivaler a múltiples index dado que su codificación así lo require.. pero eso ya es otro tema.

Entonces, si yo con la anterior cadena, hago un slice:

Código (javascript) [Seleccionar]
var cadena = 'hola mundo';
var primera = cadena.slice(0, 4);


Obtendré, "hola" dado que le estoy diciendo: Corta la cadena desde la posición 0 (primer carácter) hasta la posición 4 (recuerda, incluido el 0 (5))

De la misma forma, si hago cadena.slice(5, 10), obtendré "mundo" porque empiezo en el caracter 5 y termino en la posición (recuerda, incluido el 0) 10.

En cambio, con substr

Si hago cadena.substr(0, 4), obtendré "hola", y lo que le estaría indicando es: Corta la cadena desde la posición 0 hasta las próximas 4 posiciones como mucho.

El resultado aquí seria igual pero en el caso de la palabra mundo, no. Dado que si hago cadena.substr(5, 5) me devolverá "mundo" ya que le estoy diciendo que corte desde la posición 5 hasta los próximos 5 caracteres.


Saludos

TØtti

Me tarde un buen rato en captar como se ejecutaba la función, pero entendí todo perfectamente. Gracias.