Foros del Web » Programando para Internet » Javascript »

function indexOf() mejorada

Estas en el tema de function indexOf() mejorada en el foro de Javascript en Foros del Web. Estoy creando una function indexOf mejorada, pero no me sale. Se trata de este esquema: getIndexComa(str,ind); str es una cadena llena de comas, y ind ...
  #1 (permalink)  
Antiguo 14/01/2004, 13:45
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
function indexOf() mejorada

Estoy creando una function indexOf mejorada, pero no me sale. Se trata de este esquema:

getIndexComa(str,ind);

str es una cadena llena de comas, y ind indica el numero de la coma. Por ejemplo getIndexComa("hola,que,tal,estas",2); deberia devolver el indice de la segunda coma, es decir, la que hay entre 'que' y 'tal'.

Lo he intentado pero no me sale. Ayuda por favor.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #2 (permalink)  
Antiguo 14/01/2004, 14:07
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola derkenuke:

Es la segunda vez que me ocurre hoy, que mientras edito el mensaje, se me envía solo...

...Te decía que para cosas así uso el split... fíjate si esto te sirve:

Código PHP:
<script>
    function 
getIndexComa(cadenalugar)    {
        var 
dividir cadena.split(",");
        if (
dividir.length <= lugar) return -1;
        else    {
            var 
total lugar;
            for (
0lugar++)
                
total += dividir[i].length;
            return 
total;
        }
    }
</script> 
Saludos
  #3 (permalink)  
Antiguo 14/01/2004, 14:40
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Esta muy bien, funciona perfecto. Gracias caricatos!
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #4 (permalink)  
Antiguo 14/01/2004, 14:47
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
:

Estupendo...

Saludos
  #5 (permalink)  
Antiguo 15/01/2004, 12:32
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola, derkenuke y caricatos.

Me pareció interesante la idea y estuve enredando un rato con el código, hasta que salió esto que dejo aquí por si resulta de interés:
Código PHP:
<script>
cad="Esto,es,una,frase,para,probar,una,nueva,función";
String.prototype.indexOfNum = function (sep,num) {
    var 
pos=0; var cad=this;
    for (
i=0;i<num;i++) 
        if ( (
p=cad.indexOf(sep)) !=-) {
        
pos+=p;
        
cad=cad.substr(p+1,250);
        }
        else return 
null;
    return 
pos+num-1;
}
cadena=cad.indexOfNum(",",2);
alert(cadena);
</script> 
Saludos,
  #6 (permalink)  
Antiguo 15/01/2004, 14:01
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Me parece muy bueno tambien, otra manera valida de hacerlo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #7 (permalink)  
Antiguo 15/01/2004, 14:13
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola de nuevo.

Me alegro de que te haya gustado, pero remirando el código de caricatos, creo que donde he puesto return null debería poner return -1 que está más acorde con la función original (indexOf)

Saludos,
  #8 (permalink)  
Antiguo 15/01/2004, 14:25
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola derkenuke y JavierB:

He contrastado el ejemplo de JavierB con el mío, y hay una diferencia de 1, cuando se indexa se empieza por el 0, y por eso cuando en cuestiones numéricas hay fallos se suele devolver -1...

Por eso en mi ejemplo para que devuelva el mismo resultado hay que restar uno...

var total = lugar - 1; // cambiando esta línea.

Y para que la propuesta de JavierB devuelva -1 en los fallos, habría que cambiarlo en la linea que devuelve null

Por otra lado hay una chapucilla (creo ) en donde pone

cad=cad.substr(p+1,250);

supongo que 250 se refiere a la longitud de la cadena, si es así creo que sería conveniente

cad=cad.substr(p+1, this.length);

Usar los prototipos me parece una idea muy buena y elegante (ya lo dije en anteriores ocasiones)

Otra variante con prototipos sería:

Código PHP:
String.prototype.subcadena = function(cadenalugar)     {
    var 
dividir this.split(cadena);
    if (
dividir.length <= lugar) return -1;
    else    {
        var 
total = (lugar 1) * cadena.length;;
        for (
0lugar++)
            
total += dividir[i].length;
        return 
total;
    }

Saludos
  #9 (permalink)  
Antiguo 15/01/2004, 14:28
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284


Javi: A pesar del choque, pensabamos lo mismo...

Saludetes
  #10 (permalink)  
Antiguo 15/01/2004, 14:42
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Buen choque caricatos

Lo de cad=cad.substr(p+1,250); no es una chapucilla, es una chapuza completa Quise poner 255 y además estaba pensando más en otro lenguaje en el que la longitud máxima de una cadena es 255, pero si no vuelvo a estar equivocado no es el caso de JavaScript.

En fín Pilarín, que se agradece la corrección y espero acordarme la próxima

Saludos,
  #11 (permalink)  
Antiguo 15/01/2004, 15:13
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola otra vez:

JavierB: Fíjate en el inspector que estoy haciendo (los eventos en explorer me tienen bloqueado)...

En el último div hay un formulario y puedes ver el atributo maxLength = 2147483647 (si lo ves con explorer)

Por si le interesa a alguien, el enlace es éste:
http://www.pepemolina.com/DOM/index.html

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:30.