Foros del Web » Programando para Internet » Javascript »

ordenar arreglo con minusculas y mayusculas ?

Estas en el tema de ordenar arreglo con minusculas y mayusculas ? en el foro de Javascript en Foros del Web. Hola, genero un formulario mediante jsp en donde necesito ordenar alfabeticamante los datos alfabeticos de los campos, cuando los recupero de mi almacen de datos ...
  #1 (permalink)  
Antiguo 15/10/2008, 15:11
Avatar de xlugo2002  
Fecha de Ingreso: noviembre-2002
Ubicación: Puebla, México
Mensajes: 474
Antigüedad: 21 años, 5 meses
Puntos: 0
ordenar arreglo con minusculas y mayusculas ?

Hola, genero un formulario mediante jsp en donde necesito ordenar alfabeticamante los datos alfabeticos de los campos, cuando los recupero de mi almacen de datos uso logicamente JAVA con lo cual los ordeno alfabeticamente ABCc.. No importando si son may o min.

EL problema es cuando el usuario interactua con esa informacion en el formulario, logicamente uso javascript.... necesito hacer esa misma ordenacion , pero solo he visto el metodo sort ... pero no me trata la "A" igual a "a" y asi con toda las letras.

SIn tanto rollo ¿Como ordeno un arreglo alfabeticamente sin importar si son mayusculas o minusculas?
  #2 (permalink)  
Antiguo 16/10/2008, 03:57
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: ordenar arreglo con minusculas y mayusculas ?

Fijate si te sirve algo así:
Código PHP:
<script>
Array.
prototype.map=function(fun){
    var 
r=[];
        for(var 
i=0,l=this.length;i<l;i++){
            
r[i]=fun(this[i]);
        }
    return 
r;
}
Array.
prototype.trad=function(vecComp){
    var 
r=[];
        for(var 
i=0,l=this.length;i<l;i++){
            for(var 
ii=0,ll=vecComp.length;ii<ll;ii++){
                if(
this[i].acentos()==vecComp[ii].split('___')[0]){
                    
r[i]=vecComp[ii].split('___')[1];
                }
            }
        }
    return 
r;

String.prototype.acentos=function(){
    var 
s=['á','é','í','ó','ú','Á','É','Í','Ó','Ú'];    
    var 
r=['a','e','i','o','u','A','E','I','O','U'];
    var 
a=this;
    for(var 
i=0;i<s.length;i++){
        
a=a.split(s[i]).join(r[i]);    
    }
    return 
a;
}
function 
aux1(el){
    var 
t=el.acentos();
    return 
t.toLowerCase()+'___'+el;
}
function 
aux2(el){
    var 
t=el.acentos();
    return 
t.toLowerCase();
}
var 
vec=['Bolivia','bebé','árbol','albahaca','Alabama','zanahora','Úrsula','Teherán','tomate'];
var 
vec2=vec.map(aux1);
var 
nVec=vec.map(aux2).sort();
alert(nVec.trad(vec2));
</script> 
  #3 (permalink)  
Antiguo 16/10/2008, 05:03
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: ordenar arreglo con minusculas y mayusculas ?

Aquí tienes otra alternativa, que no digo que esté ni mejor ni peor:

Código javascript:
Ver original
  1. function compareIgnoreCase(a,b) {
  2.     return (normalize(a) > normalize(b));
  3. }
  4. function normalize(a) {
  5.     return a.toLowerCase()
  6.              .replace(/[Áá]/gi,"a").replace(/[Éé]/gi,"e").replace(/[Íí]/gi,"i")
  7.              .replace(/[Óó]/gi,"o").replace(/[Úú]/gi,"u").replace(/[Ññ]/gi,"nzz");
  8. }
  9.  
  10. ['Bolivia', 'bebé', 'Papa', 'papá', 'pintar', 'Ángel', 'piñata',
  11.  'pimpollo', 'pirata', 'árbol', 'ursulina', 'albahaca', 'Alabama',
  12.  'zanahora', 'Úrsula', 'Teherán', 'tomate'].sort(compareIgnoreCase);





Panino5001, he encontrado un error un poco raro con tu código. Bueno, dos, pero uno es que simplemente no has contemplado la ñ, pero bueno eso es una trivialidad. El problema es... curioso. Prueba a correr tu código con un vector como este:
Código:
['bebe','bebé','Papa','papá']

Última edición por venkman; 16/10/2008 a las 05:19
  #4 (permalink)  
Antiguo 16/10/2008, 05:22
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: ordenar arreglo con minusculas y mayusculas ?

Sí, tenés razón, me gusta mucho más tu opción ;)
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 09:34.