Foros del Web » Programando para Internet » Javascript »

Ayudita con una función

Estas en el tema de Ayudita con una función en el foro de Javascript en Foros del Web. Hola, Alguien me podria ayudar a hacer una función que busque si se repiten valores en una cadena? Por ejemplos tengo: 4;5;7;10..me gustaria saber si ...
  #1 (permalink)  
Antiguo 15/11/2007, 06:51
Avatar de AdRiAnCeTe  
Fecha de Ingreso: marzo-2007
Mensajes: 140
Antigüedad: 17 años, 1 mes
Puntos: 0
Ayudita con una función

Hola,

Alguien me podria ayudar a hacer una función que busque si se repiten valores en una cadena? Por ejemplos tengo: 4;5;7;10..me gustaria saber si por ejemplo el 4 sale 2 veces, dejarlo solo 1 vez..nose si me explico, que no se repitan los numeros vamos, se repitan las veces que se repitan...Un saludo!
  #2 (permalink)  
Antiguo 15/11/2007, 07:57
Avatar de Kelpie  
Fecha de Ingreso: febrero-2002
Ubicación: NorthSpain
Mensajes: 609
Antigüedad: 22 años, 2 meses
Puntos: 8
Re: Ayudita con una función

Mientras no encuentres nada mejor puedes pasar con esto.
Es muy mejorable, sobre todo en el tema de dar demasiadas vueltas de más en los ciclos interiores...

He supuesto que tus número sestán separados por un ; (punto y coma)...

Código:
function quitaRepes(cad){
  matCad=cad.split(";"); //Picamos la cadena por el ;
  matNew=new Array();  //Creamos un array para ir echando los no repes
  for (num1 in matCad){
    esta=false;
    for (num2 in matNew){
      if (matNew[num2]==matCad[num1]) esta=true;  //Flag=esta repe
    }
    if (!esta) matNew[matNew.length]=matCad[num1];  //Si no está repe meter en el array
  }
  newCad=matNew.join(";");  //Juntar el nuevo array en un string
  return newCad;  //Devolver
}
//Ejemplo de uso
document.write(quitaRepes("4;6;12;4;12;7;9;12;9;0;3;32;43;"));
__________________
Kelpie
  #3 (permalink)  
Antiguo 15/11/2007, 08:28
Avatar de AdRiAnCeTe  
Fecha de Ingreso: marzo-2007
Mensajes: 140
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Ayudita con una función

Gracias!!!
  #4 (permalink)  
Antiguo 15/11/2007, 16:56
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
Re: Ayudita con una función

Buen problema AdRiAnCeTe!

Ahí va mi idea gracias a las expresiones regulares:

Código:
function quitaRepes(str) {
	while( (reg=/(\d+;)((\d+;)*)\1/g).test(str)===true )
		str = str.replace(reg, "$1$2");
	return str;
}

var str = "1;1;2;1;3;1;4;2;3;4;5;2;6;4;7;3;2;5;7;3;4;1;5;8;2;4;6;9;3;4;1;";
document.write( str +"<br/>" );
document.write( quitaRepes(str) );
Su salida:
Cita:
1;1;2;1;3;1;4;2;3;4;5;2;6;4;7;3;2;5;7;3;4;1;5;8;2; 4;6;9;3;4;1;
1;2;3;4;5;6;7;8;9;
Claro que es más complicada, pero supongo que más eficiente. Si alguien se atreve a eliminar el while ese recibirá un aplauso de mi parte, pero que yo sepa no se puede por la propia forma de trabajar de las expresiones regulares, que lo mirado, mirado lo dejan y siguen adelante.



Un saludo
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
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 21:02.