Respuesta: [APORTE] Función range() equivalente a su similar de PHP Bueno, luego de haber pensado y probado algunas mejoras, aquí está la versión 3.0 de la función range() :
Código Javascript :
Ver originalvar range = function(start, end, step){ range.array = range.array || []; if (typeof start !== typeof end){ start = !isNaN(Number(start)) && isFinite(Number(start)) ? Number(start) : 0; end = !isNaN(Number(end)) && isFinite(Number(end)) ? Number(end) : 0; } if (typeof start === "string") start = !isNaN(Number(start)) && isFinite(Number(start)) ? Number(start) : start[0].toLowerCase(); if (typeof end === "string") end = !isNaN(Number(end)) && isFinite(Number(end)) ? Number(end) : end[0].toLowerCase(); range.array.push(start); if (!isNaN(step) && isFinite(step)) step = start > end ? Number(step > 0 ? -step || -1 : step || -1) : Number(step < 0 ? -step || 1 : step || 1); else step = start > end ? -1 : 1; start = typeof start === "string" ? String.fromCharCode(start.charCodeAt(0) + step) : start += step; return (step > 0 && start <= end) || (step < 0 && start >= end) ? range(start, end, step) : (function(){ var aux = range.array; range.array = []; return aux; })(); }; console.log(range("z", "A")); console.log(range("Z", "a")); console.log(range("z", "a")); console.log(range("a", "Z")); console.log(range("A", "z")); console.log(range("a", "z")); console.log(range("ab", "yz")); console.log(range(1, 10)); console.log(range(10, 1)); console.log(range(10, 1, 1.5)); console.log(range(1, 10, "-4")); console.log(range(10, 1, "-4")); console.log(range(1, 10, "4")); console.log(range(10, 1, "4")); console.log(range(10, 1, "a")); console.log(range(10, 1, -2)); console.log(range(1, 10, 2)); console.log(range("1", 10)); console.log(range(10, "1")); console.log(range(10, "a")); console.log(range(1, 10, -2)); console.log(range("a", 10)); console.log(range("1", "10")); console.log(range("10", "1"));
Los resultados son los siguientes:
Código HTML:
Ver originalz,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y 1,2,3,4,5,6,7,8,9,10 10,9,8,7,6,5,4,3,2,1 10,8.5,7,5.5,4,2.5,1 1,5,9 10,6,2 10,9,8,7,6,5,4,3,2,1 10,8,6,4,2 1,3,5,7,9 1,2,3,4,5,6,7,8,9,10 10,9,8,7,6,5,4,3,2,1 10,9,8,7,6,5,4,3,2,1,0 1,3,5,7,9 0,1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10 10,9,8,7,6,5,4,3,2,1
Mejoras implementadas: - Si los tipos de dato de los límites son diferentes, la función toma sus valores numéricos en caso de tenerlos, dígase "4", "100", mas no "a" o "b", caso contrario, se asigna 0 ya sea a
start y/o a end . - En caso de tener letras como límites y de estar uno de ellos en mayúscula y el otro en minúscula, siempre serán convertidos a minúsculas y se operarán como tales, obteniendo así el valor Unicode correspondiente a la letra en cuestión en minúscula.
- Siempre toma el valor numérico de
step , para así poder dar pasos de, por ejemplo, "-4" o "4", los cuales serán tomados como -4 y 4, respectivamente. - Si los límites son cadenas pero con valor numérico, dígase "1" y "10", se toma el valor numérico de ambos.
Cualquier otro aporte o sugerencia, será bienvenido.
Saludos
__________________ «Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».
― Ayn Rand
Última edición por Alexis88; 31/05/2014 a las 17:47
Razón: Ejemplos y mejoras
|