Me lo contaron y lo olvidé, lo leí y lo entendí, lo hice y lo aprendí.





martes, 3 de enero de 2017

[JavaScript][Jquery] Convertir todas las cadenas de un objeto (O cualquier variable) a mayúsculas

Como anécdota personal, en mi trabajo se hacen llamados a servicios web desde JavaScript enviando objetos con los cuales se interactuará en la base de datos; la norma es que toda cadena que se envía a la base de datos debe de estar formateada a mayúsculas, y es un gran lío pasar atributo por atributo (o campo por campo) a mayúsculas de forma manual.
Ante ésto me di la ligera tarea de crear una función que usando la recursividad, y testeando el tipo de datos con el cual trabaja en cada iteración, recorra todos los elementos del objeto y, cada cadena con la que se interactua es convertida a mayúsculas.
Ahora les comparto tal función para su uso personal, aunque eso sí, se ha de incluir la librería de JQuery al sitio donde trabajan, debido a que se hace uso de su función "type()" para saber con qué tipo de dato se está trabajando.

Les presento el código:



function objectUpperCase(objeto)
{
if(jQuery.type(objeto) == "string")
{
return objeto.toUpperCase();
}
if(jQuery.type( objeto ) == "array")
{
var arreglo = [];
for(var i=0;i<objeto.length;i++)
{
arreglo.push(objectUpperCase(objeto[i]));
}
return arreglo;
}
if(jQuery.type( objeto )=="object" || jQuery.type( objeto )=="function")
{
for (var atributo in objeto) {
objeto[atributo] = objectUpperCase(objeto[atributo]);
}
}
return objeto;
}



Como mencioné anteriormente, se testea el tipo de dato con el que se trabaja y dependiendo de ésto (cadena, array, objeto, función...) se hace uso de la recursividad para interactuar con sus elementos (en caso de que sea un objeto o arreglo), se convierte a mayúsculas (En caso de que sea directamente una cadena) o se ignora en cualquier caso que no requiera interacción. De esta forma se garantiza que aún usando objeto "complejos", todos las cadenas que se manejen serán convertidas a mayúsculas estén en la profundidad que estén.

La única desventaja de este método es la recursividad misma en JavaScript, debido a que los navegadores limitan el uso de memoria así como de llamadas recursivas de forma interna. Lo que nos limita a una profundidad no mayor de 8 o  10 (dependiendo del navegador a utilizar).

No hay comentarios:

Publicar un comentario