Foros del Web » Programando para Internet » Javascript »

Comprobar numeros

Estas en el tema de Comprobar numeros en el foro de Javascript en Foros del Web. Hola quiero crear una funcion para todos los objectos(String,Number,Array) que comprueba si en esta hay algun numero o sea si en aqui hay numero @import ...
  #1 (permalink)  
Antiguo 14/05/2013, 09:42
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 4 meses
Puntos: 29
Comprobar numeros

Hola quiero crear una funcion para todos los objectos(String,Number,Array) que comprueba si en esta hay algun numero o sea si en aqui hay numero

Código Javascript:
Ver original
  1. a=['2323asdasd',['asdas','asdas']]
  2. //Si
  3.  
  4. a='amdiasmd'
  5. //no
  6. a='adam22sadasd'
  7. //si
  8. a=232
  9. //si
  10. a='232'
  11. //si

Lo quiero hacer con prototype. El problema es que los objetos array pueden contener mas arrays dentro de ellos mismos y mas y mas. He pensado en ir comprobando cada letra de cada objeto dentro del objeto o sea:

Código Javascript:
Ver original
  1. a=['asdas',['2323sdasd',22,[['asdasd']]]]
  2. //Comprobar el a[0]
  3. //Comprobar el a[1][0]
  4. //Comprobar el a[1][1]
  5. //Comprobar el a[1][2][0]
  6. //Etc...

Pero no se me ocurre un bucle que haga esto.
A alguien se le ocurre?
  #2 (permalink)  
Antiguo 14/05/2013, 11:04
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: Comprobar numeros

Pues me imagino que con una expresión regular y una función recusiva.

Código Javascript:
Ver original
  1. function isArray(input){
  2.    return typeof(input)=='object'&&(input instanceof Array);
  3. }
  4.  
  5. function tieneNumero(n){
  6.     var reg = new RegExp('[0-9]');
  7.     return reg.test(n)
  8. }
  9.  
  10. function recursiva(ob){
  11.   if(isArray(ob)){
  12.      for(var  k in ob)
  13.         return recursiva(ob[k]);
  14.    }else
  15.       return tieneNumeo(ob);
  16. }
  #3 (permalink)  
Antiguo 14/05/2013, 11:23
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 4 meses
Puntos: 29
Respuesta: Comprobar numeros

Cita:
Iniciado por ocp001a Ver Mensaje
Pues me imagino que con una expresión regular y una función recusiva.

Código Javascript:
Ver original
  1. function isArray(input){
  2.    return typeof(input)=='object'&&(input instanceof Array);
  3. }
  4.  
  5. function tieneNumero(n){
  6.     var reg = new RegExp('[0-9]');
  7.     return reg.test(n)
  8. }
  9.  
  10. function recursiva(ob){
  11.   if(isArray(ob)){
  12.      for(var  k in ob)
  13.         return recursiva(ob[k]);
  14.    }else
  15.       return tieneNumeo(ob);
  16. }
Hola creo que en esta parte:

Código Javascript:
Ver original
  1. for(var  k in ob)
  2.         return recursiva(ob[k]);

Abondoba el bucle a la primera y hace de nuevo la función con lo que para var a = ['funciona','no funciona','no funciona']

O me confundo algo.Puedes explicarme como funciona esta función recursiva.

Ya que lo probe y devuelve false aqui:

Código Javascript:
Ver original
  1. var array = ['coas','sasm2sad','asdmiadmi2m2imasdas',[2323,'sa2',['asdmai2 asdasd  ','miadas',[]]]];  //false

y si cambio el primero agregando un numero evuelve true pero los demas no los comprueba.

Código Javascript:
Ver original
  1. var array = ['coa232s','sasm2sad','asdmiadmi2m2imasdas',[2323,'sa2',['asdmai2 asdasd  ','miadas',[]]]]; //true

Última edición por patilanz; 14/05/2013 a las 11:34
  #4 (permalink)  
Antiguo 14/05/2013, 11:59
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 13 años
Puntos: 343
Respuesta: Comprobar numeros

Si estás usando Prototype (como mencionás en el primer post), podes hacer uso del método Array#flatten, que básicamente "aplasta" los arrays a una única dimensión.

Ejemplo, comprobar si hay al menos un valor númerico:

Código Javascript:
Ver original
  1. [[{a: 1}], ['a', 'b', ['c', ['d'], [1]]]].flatten().reduce(function(memo, current) {
  2.     return memo || !isNaN(Number(current)); // hay un numerico o el valor actual es numerico
  3. }, false); // true
__________________
blog | @aijoona
  #5 (permalink)  
Antiguo 14/05/2013, 13:09
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: Comprobar numeros

La parte de

for(var k in ob)
return recursiva(ob[k]);

Lo que hace es que si tienes un arreglo u objeto, a cada elemento lo vuelve a analizar con la función recursiva.

Y en realidad se supone que mientras no encuentre un elemento con números continua analizando el elemento hasta donde sea posible, aunque no le probé, sólo lo escribí aquí.

Si encontrara un elemento con números al inicio de todo el objeto, saldría sin analizarlo todo, que según entendí con tu primer ejemplo, eso quieres.
a=['2323asdasd',['asdas','asdas']]
//Si

Pero creo que te resulta mejor lo que te indica Aijoona

Etiquetas: funcion, numeros
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 20:16.