![]() |
Manipular array Hola todos : no sé si me estoy ahogando en un vaso de agua; pero no puedo agregar y/o quitar elementos de array. Probé con pop() , shift() , etc. ... para modificar los array, pero solamente me reconoce reverse() , sort() y algún otro. ¿No funcionan en IE5? ¿Hay algúna forma de agregar y eliminar un elemento en particular en un lugar específico que funcione en todos los navegadores? -se entiende que descarto las versiones "4", pero el IE5 está instalado aún en muchas máquinas. gracias furoya |
Hola furoya, no sé exactamente la dinámica que necesites para agregar o eliminar elementos, pero si quieres dejar vacía alguna posición concreta tal vez podría bastar con que indicaras nombreArray[posicion] = null y para agregar un elemento nuevo pedirle un nombreArray[nombreArray.length] = valor :pensando: |
Hola Gul Dukat: gracias por responder. Lo que quería era cambiar el orden de los elementos (el primero que vaya al tercero, el séptimo al primero) pero sin alterar el tamaño original. Se me ocurrió experimentar con éstos métodos y empezó a taparme el agua; pensé que me estaba equivocando y al final sospeché que era el navegador quien no los aceptaba. Por suerte seguí probando y concat(), slice() funcionaron bien. Tengo que dar algunas vueltas, pero de última consigo lo que busco con ellos. Todavía me queda la duda sobre los navegadores que soportan shift(), unshift (), push(), pop(), .... Pero ya no es urgente. (bueno, nunca lo fue; nadie se va a morir por no saber ésto). saludos furoya |
Furoya: Los métodos de array concat, pop, push, shift, slice, splice y unshift fueron implementados en la versión 1.2 de JavaScript. Y Javascript 1.2 es soportado en IE a partir de la versión 5.5. Hace ya tiempo que no he hecho aplicaciones con JavaScript, pero para que me funcionaran los métodos tenía que identificar las versiones sin soporte para JavaScript 1.2, y entonces usar prototype para emular el funcionamiento: Código: function pop(){ |
Hola otra vez : Ese es un buen dato, Beakdan, gracias. Vi 2 ó 3 sitios sobre el tema y no aclaraban quién soportaba cada método. Siempre me olvido de los prototype; usando el condicional son una buena opción paa superar estas limitaciones. Por otro lado, no vi un método que permita cambiar de lugar un elemento de array. Quiero decir, teniendo numero = [0,1,2,3,4,5,6,7,8,9]; que exista algo como numero.move(3,7); para llevar el elemento de índice 3 a la posición 7 y que nos devuelva numero = [0,1,2,4,5,6,7,3,8,9]; Se podía crear un prototype o simplemente una función move(numero,3,7) , quizás usando slice() y concat(). Voy a probar, por ahora queda como idea. Tampoco hay uno que "baraje" (mezcle) los elementos. En las FAQs hay algo para desordenar un array, pero me repite la secuencia, por lo que no es tan aleatóreo. saludos furoya |
Hola furoya: Pensé en ordenar mi galería de fotos y me puse es este tema, y preparé esto: Código: Array.prototype.cambiar = function(a, b) {Puedes ver un ejemplillo aquí: http://www.pepemolina.com/pruebas/ordenarArrays.html Saludos :arriba: |
Hola caricatos: Lo de mover un elemento tiene una vuelta más. En vez de intercambiar posiciones de Array lo que busco es llevar un elemento ( p.e. Array[3] ) a una nueva posición ( p.e. [7]), pero desplazando todos los intermedios 1 lugar ( [0,1,2,4,5,6,7,3,8,...] ). No sé qué utilidad pueda tener -alguien se la va a encontrar-, yo solamente la necesito como eemplo de uso de slice() y concat(), aunque algo así es más fácil de hacer con for(). El ejemplo de la tabla ordenada está muy bueno: es simple y eficiente. No sé si ya estará en las FAQs, pero habría que ponerlo. Allí hay uno también muy bueno, que trabaja con tablas ya hechas, y por lo tanto es -debe serlo- bastante complejo. Pero si uno puede "escribir" la tabla con un escript, el tuyo es mejor. ¿Eso es lo que se llama "array bidimensional"?. saludos furoya |
Hola Furoya: Había pensado en ponerlo en las FAQs, pero traté de implementar una ordenación con el método quicksort y me encontré con varios errores... :pensando: Justamente por esa razón indagué sobre esos métodos que comentas (slice, concat...) y creo que ese move() tendría que ser una concadenación de tres arrays (el del medio de un solo elemento)... y de tratarse de mover los elementos de los extremos solo se concadenarían 2... aunque en tal caso sería más eficiente un pop() y un push() ... Si me sale el "move()" te pasaré el código. Saludetes :adios: |
Hola otra vez : No estoy seguro de si debes cambiarlo. Uno de los problemas que generó mi pedido de ayuda fue la incompatibilidad de algunos métodos y atributos con navegadores antiguos. Creo que quicksort está en ese grupo. Lo del "move" lo hice este fin de semana y salió medianamente bien, pero no está de más un nuevo código para comparar. Gracias. Después de mil pruebas también terminé el de mezclar elementos. No es que estuviera tan dificil, pero no me decidía sobre cuál mecánica era la mejor; y me quedé con la más simple. Lo tengo en una máquina que perdió la disquetera y no tiene salida a internet. En cuanto pueda recuperar esos códigos los posteo. saludos furoya |
Hola otra vez: Estuve haciendo nuevos métodos para arrays que puse en este mensaje: http://www.forosdelweb.com/f13/metodos-arrays-250294/ Pero usando esos métodos como pop, slice, shift... Voy a ver si implemento esa funciones y publico todo. Saludos :adios: |
Aquí están los ejemplos que hice. Código: Código: furoya |
Hola a todos. Furoya, te envío otra forma de crear el método "move" , para que lo compares y poder ver los posibles errores que se me puedan haber escapado. Código PHP: |
Hola otra vez: Que bien que empezamos a tener una buena colección de métodos para los arrays :aplauso: Yo he descubierto algún fallo en la implementación, pero ya va funcionando. Puse una página aquí: http://www.pepemolina.com/arrays/index.html en donde probaré las novedades. Acomodaré también los script que se vayan añadiendo a estos mensajes y los iré actualizando en el enlace. furoya: Parece que la idea de tu script de mover muy parecida a la mia de encadenar los subArrays... pero yo pensé en rotar() los elementos :pensando: Saludos :arriba: |
Hola de nuevo a todos. He cambiado la metódo "move" para que también pueda rotar los elemento a la derecha o izquierda, también otro método para ordenar aleatoriamente los elementos. He añadido unas funciones que encuentro de gran utilidad para el método sort() que por defecto ordena alfabeticamente los elementos, he puesto comentarios en el código para explicar para que vale cada una. Código PHP: |
Hola, (que interesante se está poniendo este tema) : caricatos : sí, me parece que varios están quedando parecidos; pero las pequeñas variaciones de mecanica o formato terminan sirviendo para que quien esté tratando de aprender pueda comparar como se llega a un mismo resultado por diferentes caminos. Por otro lado, ya expliqué que si algo me sale bien, seguro que es porque se lo había visto antes a alguien ... kepawe : no tuve tiempo de probar el último; pero sí estuve jugando con los anteriores. Lindo lo de bold(). Al principio no me funcionaba porque yo cambiaba la n en my_array.move_to(8,n). :golpeado: El otro también anda. Voy a estudiar eso del condicional; parece complicado, pero algo como a = a >= this.length ? this.length - 1 : a < 0 ? 0: a b = b >= this.length ? this.length - 1 : b < 0 ? 0: b se ve más prolijo que if((indio<julieta && noviembre == indio) || (indio>julieta && noviembre == indio*1+1)) gracias a todos furoya |
Hola furoya Lo del condicional no es tan complicado, el truco es añadir es otra condicional en el resultado negativo, asi podrias añadir todas las comparaciones que veas necesaria. expresion_comparacion ? verdad:expresion_ comparacion ? verdad: expresion_comparativa? verdad : mentira a = a >= this.length ? this.length - 1 : a < 0 ? 0: a b = b >= this.length ? this.length - 1 : b < 0 ? 0: b En esta expresion solo compruebo que los argumento no sean mayor que la longitud del array - 1 o inferior a 0 a = es mayor o igual que la longitud del array ? si es verdad ( this.length -1) : es mentira comprabamos que el valor no sea menor de cero ? es verdad (0): es mentira mantenemos el valor original de (a) Como ves parece más de lo que es. :-) |
Hola otra vez: Estoy actualizando la página que antes mencioné (cambiando la estética, y añadiendo los métodos que se ven en este mensaje ... y el otro... :pensando: ), y el resulado se puede ver aquí: http://www.pepemolina.com/arrays/index.html Los métodos están en un .js aparte: http://www.pepemolina.com/arrays/Arrays.js Pero los nuevos métodos move1 y move_to no funcionan bien, supongo que será porque los parámetros que paso son cadenas y no números (move_to('left') y 'right' funcionan bien porque son cadenas... :pensando: ) Bueno, tal vez sea mejor chequear los parámetros de las funciones, yo lo hice con mi "mover" y no da ningún error. Saludos :arriba: |
Hola de nuevo Caricatos, me gusta como está quedado la página. :arriba: He estado mirando como solucionar el problema y la forma más sencilla que en contrado es modificando un poco las funciones en Arrays.js . Código PHP: Código PHP: |
Hola otra vez: kepawe: Gracias por los retorques... ya arregle los scripts y la página, en donde añadí algunas cosas más: shuttle de furoya y tu random_array, que por cierto tuve que añadirle al final "return this" para que pudiera funcionar... no sé si crees que está bien :pensando: También puse unos enlaces a esta página, nuestros perfiles... Y empecé a desarrollar otras pestañas sobre arrays asociativos y colecciones. Me gustaría que me dieran su opinión. Por ahora puse cosas que "devuelven arrays", no ´se que hacer con los métodos que devuelven otras cosas y a la vez modifican el array como pop, push, shift... Creo que pondré campos dentro de las descripciones mostrando el array original modificado... Bueno, si hay alguna sugerencia, las espero. Saludos :arriba: |
Cita:
caricatos : tu página de métodos está quedando cada vez mejor. Me sorprendió que no funcionaran bien los move, y después entendí que era un tema del formulario. Pero esta objeción junto con tu ejemplo de ordenación de tabla, me dieron un par de ideas. Para empezar, sort ordena por caracteres; es decir : que los valores numéricos van a ser interpretados como cadenas, y así un "27" va a quedar antes que un "8". Lo que no está mal si queremos simular un orden alfabético, pero no vi un método que ordene valores numéricos de menor a mayor o viceversa. Por ahora sólo tengo como encontrar el valor mínimo o máximo de una lista de números, y también los elementos más corto y más largo de un Array Código: <HTML>saludos furoya |
Hola furoya: Me alegro de que te guste como va, y agracezco los aportes... aunque este alojada en mi dominio, ya sabes que es de todos. Ahora no voy a estudiar tu código porque ya es algo tardillo, pero te voy a comentar un sistema que implementé hace unos años en Pascal (cuando se usaba Turbo Pascal) para una ordenación alfabética. Se trata de hacer una cadena ordenada con el alfabeto: "AaÁáBbCc... MmNnÑñOoÓó... Zz"... Luego recorrer la cadena hasta encontrar el primer carácter diferente y comparar la posición del elemento en el alfabeto que hemos creado... Ahora no estoy seguro si debe usarse charAt o indexOf :pensando: Bueno, si tengo tiempo mañana, trataré de hacer un ejemplillo. Saludos :arriba: |
Hola caricatos y furoya. Caricatos: no es necesario añadir "return this" al método random, ya que solo modicamos el orden del mismo array. Por ejemplo si quisieramos hacer una copia de un array con los elementos rotados a la izquierda, y eliminar el ultimo elemento del array original si es necesario utilizar return para enviar la copia, pero no seria necesario para el array original. Te envio este ejemplo. Código PHP: Cita:
En cuanto a lo de ordenar los numeros puedes utilizar la funciones para el metodo sort() que puse en un anterior mensaje, tengo una vaga idea de como funciona ya que estas funciones no son mias. Las vuelvo a enviar. Código PHP: Saludos:adios: |
Soy un papelón. donde puse "... no vi un método que ordene valores numéricos ..." debí escribir "... no miré ...". Es cierto que sort ordena como string (cadena); pero en varias de las páginas que busqué cuando no pude echar a andar algunos métodos, explicaban que agregando funciones a sort se podía ordenar números en forma ascendente y descendente. Lo que no mostraban era qué funciones. Me alegra que también las hayas agregado a este tema. Ahora que leo lo de "...una cadena ordenada con el alfabeto ..." recuerdo que una vez hice un encriptador de páginas web con una especie de ROT13 (que no era '13') y usé dos cadenas : una ordenada según ASCII, y la otra desplazada varios caracteres. Se me ocurre que el mismo sistema para "encriptar" se puede usar para reescribir cada elemento según nuestro alfabeto y luego ordenarlo con sort ; para después volver cada palabra a su forma original. Para ser más claro : la palabra "maña" se convierte en "maoa", se ordena, y luego se vuelve a "maña"; "año" quedaría como "aop", porque el agregado de la "ñ" desplaza todo el resto del alfabeto un lugar. Es una lástima que no encuentre ese código. Estoy casi seguro de que quedó en la máquina de mi "Ex". Si no me formateó el disco, voy a buscar alguna excusa para recuperarlo. (Pensar que lo abandoné porque me dió verguenza estar trabajando en algo con lo que estoy en total desacuerdo -digo, lo de encriptar HTML, JS,...-. Pero en esta vida hasta lo que no nos gusta termina sirviendo, tarde o temprano.) saludos furoya |
Hola a todos: La verdad es que estoy un poco abrumado con estos últimos mensajes, y me ha sorprendido gratamente los aportes de kepawe... (a furoya ya lo conocía y nunca tuve dudas sobre el nivel de sus aportaciones) Lo de devolver el array o una copia modificada también lo entiendo, pero no llego a comprender los criterios que hay que considerar para dejar el mismo array o devolver una copia. Creo que cuando consiga entenderlo mejor, me explayaré en la página sobre este tema, porque creo que es un tema muy interesante. Muchas gracias por enseñarme cosas nuevas. Saludetes :adios: |
Hola caricatos : coincido plenamente con lo de los aportes de kepawe, y me alegra mucho que se haya sumado al tema. Con respecto al comenterio sobre el otro forero ... creo que habla mejor de tí, que eres muy generoso ( el muy caradura en su vida tocó un Array y se mete como si supiera !). Bien, pero voy aprendiendo. Y les agradezco la paciencia. Empecé algo para el spanishSort(); pero no sé si es para MSIE o para cualquier navegador, por eso paré. Lo posteo a continuación. Como es una prueba, solamente usa minúsculas sin acento; y aún falta ordenar los segundos valores y una vez ordenados mostrar los primeros en el mismo orden. Código: saludos furoya |
Hola de nuevo Cita:
He utilizado la idea de encriptar de furoya, pero utilizando expresiones regulares. Cita:
<html> <head> <title>spanish_sort( )</title> <script language=JavaScript type=text/javascript> <!-- Array.prototype.spanish_sort = function(){ //Creamos este array para copiar los elementos del array var temp_array = new Array() // Poblamos el array temp_array con los elementos de array queremos ordenar for(var ctr = 0; ctr < this.length ; ctr++){ temp_array[ctr] = this[ctr] // Sustituimos las vocales acentuadas y la ñ (mininusculas) temp_array[ctr] = temp_array[ctr].toString().replace(/á|é|í|ó|ú|ñ/g,function (str,offset,s) { str =str=="á"?"ab":str=="é"?"ef":str=="í"?"ij":str=="ó "?"op":str=="ú"?"uv":str=="op"?"":"op" return (str) } ) //Sustituimos las vocales acentuadas y la ñ (mayusculas) temp_array[ctr] = temp_array[ctr].toString().replace(/Á|É|Í|Ó|Ú|Ñ/g,function (str,offset,s) { str =str=="Á"?"AB":str=="É"?"EF":str=="Í"?"IJ":str=="Ó "?"OP":str=="Ú"?"UV":str=="OP"?"":"OP" return (str) } ) } // ordenamos alfabeticamente var sc = true var lg = temp_array.length while(sc &&(--lg > 0)){ sc= false for(var i =1; i<= lg; i++){ if(temp_array[i-1] > temp_array[i]){ tmp = temp_array[i -1] tmpo = this[i-1] temp_array[i-1] = temp_array[i] this[i-1] = this[i] temp_array[i] = tmp this[i] = tmpo sc= true } } } } //--> </script> </head> <body> <script language=JavaScript type=text/javascript> <!-- var myarray = new Array("Zapato","NIÑA","1&1",1,333,"AL","niño","NIÑ O","áó","áo","zapato","ñu","ÑU","niña","a","No a la guerra!!","Ñ","ñ","nana","caSa","exposicion","No a la GUERRA!!","tú","té","tílde","toldo","exposición"," A") var show = "" var show1 ="" var show2 ="" for(var ctr = 0; ctr < myarray.length; ctr++){ show += myarray[ctr] + "<br>" } myarray.sort() for(var ctr = 0; ctr < myarray.length; ctr++){ show1 += myarray[ctr] + "<br>" } myarray.spanish_sort() for(var ctr = 0; ctr < myarray.length; ctr++){ show2 += myarray[ctr] + "<br>" } //--> </script> <table border="1"> <tr> <td><b>ARRAY ORIGINAL</b></td> <td><b>MÉTODO sort( )</b></td> <td><b>MÉTODO spanish_sort( )</b></td> </tr> <tr> <td><script>document.write(show)</script></td> <td><script>document.write(show1)</script></td> <td><script>document.write(show2)</script></td> </tr> </table> </body> </html> Furoya, no entiendo bien lo de "Con respecto al comenterio sobre el otro forero....", pero creo que sepamos mucho o poco de un tema, todos aportamos algo. Saludos :adios: |
Hola furoya y caricatos. El código del método "spanish_sort" tiene un error. Posiciona la "o" antes que la "ñ", mando el script corregido. <script language=JavaScript type=text/javascript> <!-- Array.prototype.spanish_sort = function(){ //Creamos este array para copiar los elementos del array var temp_array = new Array() // Poblamos el array temp_array con los elementos de array queremos ordenar for(var ctr = 0; ctr < this.length ; ctr++){ temp_array[ctr] = this[ctr] // Sustituimos las vocales acentuadas y la ñ (mininusculas) temp_array[ctr] = temp_array[ctr].toString().replace(/á|é|í|ó|ú|ñ/g,function (str,offset,s) { str =str=="á"?"ab":str=="é"?"ef":str=="í"?"ij":str=="ó "?"op":str=="ú"?"uv":str=="ñ"?"n~":"n~" return (str) } ) //Sustituimos las vocales acentuadas y la ñ (mayusculas) temp_array[ctr] = temp_array[ctr].toString().replace(/Á|É|Í|Ó|Ú|Ñ/g,function (str,offset,s) { str =str=="Á"?"AB":str=="É"?"EF":str=="Í"?"IJ":str=="Ó "?"OP":str=="Ú"?"UV":str=="Ñ"?"N~":"N~" return (str) } ) } // ordenamos alfabeticamente var sc = true var lg = temp_array.length while(sc &&(--lg > 0)){ sc= false for(var i =1; i<= lg; i++){ if(temp_array[i-1] > temp_array[i]){ tmp = temp_array[i -1] tmpo = this[i-1] temp_array[i-1] = temp_array[i] this[i-1] = this[i] temp_array[i] = tmp this[i] = tmpo sc= true } } } } //--> </script> Saludos :adios: |
Hola de nuevo Después después de corregir el error de la "ñ", he caido en la cuenta que lo mismo le sucede a las vocales acentuadas,vuelvo ha enviar el script corregiendo estos errores. Creo que ahora va bien. <html> <head> <title>spanish_sort( )</title> <script language=JavaScript type=text/javascript> <!-- Array.prototype.spanish_sort = function(){ //Creamos este array para copiar los elementos del array var temp_array = new Array() // Poblamos el array temp_array con los elementos de array queremos ordenar for(var ctr = 0; ctr < this.length ; ctr++){ temp_array[ctr] = this[ctr] // Sustituimos las vocales acentuadas y la ñ (mininusculas) temp_array[ctr] = temp_array[ctr].toString().replace(/á|é|í|ó|ú|ñ/g,function (str,offset,s) { str =str=="á"?"a{":str=="é"?"e{":str=="í"?"i{":str=="ó "?"o{":str=="ú"?"u{":str=="ñ"?"n{":"n{" return (str) } ) //Sustituimos las vocales acentuadas y la ñ (mayusculas) temp_array[ctr] = temp_array[ctr].toString().replace(/Á|É|Í|Ó|Ú|Ñ/g,function (str,offset,s) { str =str=="Á"?"A{":str=="É"?"E{":str=="Í"?"I{":str=="Ó "?"O{":str=="Ú"?"U{":str=="Ñ"?"N{":"N{" return (str) } ) } // ordenamos alfabeticamente var sc = true var lg = temp_array.length while(sc &&(--lg > 0)){ sc= false for(var i =1; i<= lg; i++){ if(temp_array[i-1] > temp_array[i]){ tmp = temp_array[i -1] tmpo = this[i-1] temp_array[i-1] = temp_array[i] this[i-1] = this[i] temp_array[i] = tmp this[i] = tmpo sc= true } } } } //--> </script> </head> <body> <script language=JavaScript type=text/javascript> <!-- var myarray = new Array("Zapato","NIÑA","1&1",1,333,"AL","tu","niño" ,"v","u","ú","NIÑO","áó","áo","zapato","opera","ó" ,"ñu","ÑU","niña","a","No a la guerra!!","Ñ","ñ","nana","caSa","exposicion","o"," ó","No a la GUERRA!!","tú","té","tílde","toldo","exposición"," A") var show = "" var show1 ="" var show2 ="" for(var ctr = 0; ctr < myarray.length; ctr++){ show += myarray[ctr] + "<br>" } myarray.sort() for(var ctr = 0; ctr < myarray.length; ctr++){ show1 += myarray[ctr] + "<br>" } myarray.spanish_sort() for(var ctr = 0; ctr < myarray.length; ctr++){ show2 += myarray[ctr] + "<br>" } //--> </script> <table border="1"> <tr> <td><b>ARRAY ORIGINAL</b></td> <td><b>MÉTODO sort( )</b></td> <td><b>MÉTODO spanish_sort( )</b></td> </tr> <tr> <td><script>document.write(show)</script></td> <td><script>document.write(show1)</script></td> <td><script>document.write(show2)</script></td> </tr> </table> </body> </html> Saludos :adios: |
Hola de nuevo He añadido el método quicksort para mejorar el script. <script language="JavaScript" type="text/javascript"> <!-- function comparate(m,dc){ if(m == dc) return 0 else if(m < dc) return -1 else if(m >dc) return 1 } function quicksort( m, mo, inf, sup){ var izq,der,mitad,x,y var izq = inf var der = sup var mitad = m[Math.floor((izq + der) / 2)] do{ while (comparate(m[izq],mitad)< 0 && izq < sup) izq++ while (comparate(mitad,m[der])< 0 && der > inf) der-- if (izq <= der){ x = m[izq]; y = mo[izq] m[izq] = m[der];mo[izq] = mo[der] m[der] = x;mo[der] = y izq++; der-- } } while (izq <= der){ if (inf < der) quicksort(m,mo, inf, der) if (izq < sup) quicksort(m,mo, izq, sup)} } Array.prototype.spanish_sort = function(){ //Creamos este array para poblarlo con los elementos del array original var temp_array = new Array() // Poblamos el array temp_array con los elementos de array queremos ordenar for(var ctr = 0; ctr < this.length ; ctr++){ temp_array[ctr] = this[ctr] // Sustituimos las vocales acentuadas y la ñ (mininusculas) temp_array[ctr] = temp_array[ctr].toString().replace(/á|é|í|ó|ú|ñ/g,function (str,offset,s) { str =str=="á"?"a{":str=="é"?"e{":str=="í"?"i{":str=="ó "?"o{":str=="ú"?"u{":str=="ñ"?"n{":"n{" return (str) } ) //Sustituimos las vocales acentuadas y la ñ (mayusculas) temp_array[ctr] = temp_array[ctr].toString().replace(/Á|É|Í|Ó|Ú|Ñ/g,function (str,offset,s) { str =str=="Á"?"A{":str=="É"?"E{":str=="Í"?"I{":str=="Ó "?"O{":str=="Ú"?"U{":str=="Ñ"?"N{":"N{" return (str) } ) } // ordenamos quicksort(temp_array,this,0, this.length -1) } //--> </script> He pensado que seria util un método para extraer un subconjuntos de elementos según las letras o números, si modificar el array original.Por ejemplo en un array númerico: var numeros = [1,2,20,4,200,6] var numero1 = numeros.extraer(4,21) Extraeria los numeros entre 4 y 21. Con las letras sería algo parecido. var letras = ["coche","avión","león"] var letras1 = letras.extraer("a") var letras2 = letras.estraer("a","d") La variable letras1 extraria todos los elementos que empiecen por "a" o "á" La variable letras2 extraria todos los elementos comprendidos entre "a" y "d". Si lo consiguo lo envio. Saludos:adios: |
Hola todos : kepawe : En realidad es complicado, pero de a poco se va resolviendo. Me pareció gracioso -no sé por qué- notar que te encontrabas con los mismos problemas que yo al avanzar con el desarrollo. En un punto empecé a sospechar que el orden alfabético en español va a ser superado por un orden alfabético 'universal'. Pero no nos adelantemos y vamos desde un principio. Para empezar, me encapriché con usar sort(), cuando debe haber formas de ordenar más eficientes, que no usen el código ANSI que es cualquier cosa menos alfabético. No encontré material sobre quikSort(), pero debe tener la misma secuencia. Por otro lado, no usé expresiones regulares a pesar de revelarse como la manera más práctica de reemplazar caracteres; porque me bajé un tutorial hace 1 mes y medio y todavía no tuve tiempo de estudiarlo. Ésto último me recuerda que debo una aclaración. Es evidente que todos podemos aprender aún de las ideas más absurdas; pero también queda muy claro que sé poco y nada de Arrays. Por eso dije que caricatos fue muy generoso al dar por sentado que mis aportaciones debían estar al nivel del tema, y que mi osadía no tiene límites si pretendo que lo estén. Aún así, dejo este código : Código:
El problema que se aparece ahora, es más lexicológico que técnico. Hay que ubicar en su sitio caracteres como eth ("Ð") o la doble s alemana ("ß"), que serán salteados si no se usan, pero que deben estar por si son necesarios. Un tema aparte son las vocales dobles ("æ" , "Œ"), ya que para la ordenación final deben ser reemplazadas por 2 caracteres ("ae" y "OE" respectivamente); y es allí donde se van a necesitar seguro las regular expressions. Supongo que con ésto ya tenemos bastante por hoy. saludos furoya |
Hola de nuevo. furoya: Es importante conocer el lenguaje parar poder llevar a cabo una idea, pero sin ideas ese conocimiento es en vano. Digo esto porque la idea que tuviste me parece muy buena y es lo más importante, la forma de llevarla a cabo es secundario, depende de los conocimientos del lenguaje para aprovechar mejor sus recursos, por eso aunque yo tengo unos pocos conocimientos sobre expresiones regulares y poco más de arrays, sin tu idea, el camino que hubiera escogido para desarrollar el método hubiera sido más arduo y complejo en el caso de haberlo conseguido. En cuanto a que sabes poco o nada de arrays, viendo tu script no es tanta la diferencia entre los dos, creo que con aprender el funcionamiento de expresiones regulares y con lo que esta aprendiendo sobre arrays esta poca diferencia sera nula en poco tiempo. No se que algoritmo utilizara sort() para ordenar los elementos pero dentro de los algoritmos para ordenar que hay, quicksort es uno de los más rápidos. Te envío esta dirección para que veas los algoritmos más conocidos para ordenar para que te hagas una idea de como funcionan. http://www.alumnos.unican.es/%7Euc16069/Javascript.htm En cuanto a las preguntas que planteas, he estado indagando sobre que codificación de caracteres. Haz esta prueba, copia el resultado de este script y pegalo en el block de notas, veras que si intentas guardarlo en codificación ANSI , te saldrá un mensaje avisando de que existe caracteres UNICODE. <html> <head> <title></title> </head> <body> <script language="JavaScript" type="text/javascript"> <!-- var s = "String.fromCharCode(32" for (var Counter = 33; Counter < 400; Counter++) { s += "," + Counter } s += ")" document.write(eval(s)) //--> </script> </body> </html> Como sabes la codificación UNICODE permite representar cualquier carácter escrito en en el mundo, y los navegadores están preparados para leer cualquier idioma, si prueba el script en Mozilla y IE veras que algunos caracteres no aparecen en IE, creo que esto depende los paquetes de idiomas que tenga el navegador instalados y la configurado el usuario, creo que es suficiente con la configuración que viene por defecto para los caracteres occidentales. No se nada de alemán , pero modificando un poco el script anterior, podrías conseguir adaptarlo al aleman. Por ejemplo si quiseramos ordenar æ después de á bastaría con añadir unas lineas. for(var ctr = 0; ctr < this.length ; ctr++){ temp_array[ctr] = this[ctr] // Sustituimos las vocales acentuadas y la ñ (mininusculas) temp_array[ctr] = temp_array[ctr].toString().replace(/á|é|í|ó|ú|ñ/g,function (str,offset,s) { str =str=="á"?"a{":str=="é"?"e{":str=="í"?"i{":str=="ó "?"o{":str=="ú"?"u{":str=="ñ"?"n{":"n{" return (str) } ) //Sustituimos las vocales acentuadas y la ñ (mayúsculas) temp_array[ctr] = temp_array[ctr].toString().replace(/Á|É|Í|Ó|Ú|Ñ/g,function (str,offset,s) { str =str=="Á"?"A{":str=="É"?"E{":str=="Í"?"I{":str=="Ó "?"O{":str=="Ú"?"U{":str=="Ñ"?"N{":"N{" return (str) } ) // caracteres alemanes temp_array[ctr] = temp_array[ctr].toString().replace(/æ/g,function (str,offset,s) { str =str=="æ"?"a|":"a|" return (str) } ) } El resultado seria para á seria a{ y para æ a|, al ordenar el signo { va antes que | por lo tanto ordinaria primero la a acentuada. Espero haberme explicado bien, no es mi fuerte. Corrigeme si me equivoco en algo. Saludos :adios: |
:pensando:El tema de las vocales se me complica un poco; pero no tiene que ver con el código sino con la lógica de los diccionarios, que toman a las vocales acentuadas como vocales simplemente, hasta que aparecen 2 palabras iguales y entonces sí valen los acentos. Con respecto a las vocales dobles ... el método funciona bien, pero casi las cambiaría por su versión "separada" ( æ por AE) y no admitiría discusiones para otros idiomas. El algoritmo que usa sort en el ejemplo para ordenar números que posteaste más arriba funciona muy parecido a quickSort; estuve poniendo alertas para seguir el mecanismo. La página que recomiendas me demuestra que esa costumbre no es de mi exclusiva propiedad. La forma en que muestra el desarrollo se termina pareciendo a la de mi código anterior. Todavía no me animo a corregir 'códigos'; pero seguí investigando sobre ordenamiento alfabético mientras le daba una vuelta de tuerca más al método de cadena reordenada. Un aparte : es, al menos, interesante que preguntes si hay algo para corregir. No sé si es un tema personal o cultural -aquí se reúne gente de distintas ciudades, formación, edad- pero más de uno considera ofensivo el corregir un mensaje ajeno. A mi me costó entenderlo, porque la idea de un foro es proponer algo publicamente para luego mejorarlo, ampliarlo, re-utilizarlo; y las correcciones, en más de una ocasión, son inevitables. Ésto debe ser más fácil de entender para quien tiene educación científica -se me ocurre-. También pienso que caricatos ya tiene experiencia en esto de crear códigos en conjunto y es una suerte que se haya interesado en el tema, pero ... Caricatos : vi que pusiste mi nombre en la página de los Arrays y me dio un poco de vergüenza. Al pricipio creí que era provisorio, ahora sospecho que se va a quedar ahí. Gracias, lo único que vas a conseguir es hacerme famoso.Volvamos al asunto del alfabeto. Busqué en internet y no hallé listas de caractees ordenados para cada idioma, pero supe que la misma letra puede estar ubicada en distintos sitios dependiendo de qué lengua la utilice. El segundo paso fue pedir a amigos y conocidos que me dieran los abecedarios que conocían, y me hice solamente del francés, alemán, danés. Cuando me descubrí caminando hacia la compañía de teléfonos para pedir una guía de cada país del mundo, sospeché que estaba encarando mal el problema. Si bien un ordenamiento final de letras va a ser, de alguna forma, arbitrario; el ordenamiento de signos y símbolos ( que no suelen estar en diccionarios ni en las páginas amarillas ) puede ser caótico. Elegí un orden, solamente para seguir trabajando, con la certeza de que no será definitivo. La última versión del método de ordenar por cadenas está en pausa. No me parece que sea páctica y por eso no la posteo. Pero sí la puedo explicar. Quise ahorrarme uno de los dos strings ( recordemos que del primero obtenía una posición de caracter y el segundo me daba un caracter de reemplazo que serviría para que sort lo ordenase según ASCII ), y decidí aprovechar que cada caracter tiene su número, para convertir todas las palabras a números y luego, sí, pasarlos por sort o quickSort . Pero el ahorro, comparado con la cantidad de código que debo agregar, es mínimo. Un ejemplo : si quisieramos ordenar AMA, BOJ, CASA, UNA (A=1...Z=26) nos quedaría Código: AMA 1131 ó AMA 011301Ésto último parece más eficiente, pero requiere más cálculo y más líneas de código aún. Por eso lo abandoné. Dejo el orden con el que estoy trabajando. Si algún lingúista puede sugerir algún cambio, a mí no me ofende y será bienvenido. Código: furoya |
Hola a todos: furoya: Lo de poner créditos creo que tan solo es lo justo, aunque cuando alguien usa código mio, simplemente me conformo con el agradecimiento. La página, no la toco desde hace tiempo por falta del "ídem" ... Además, mi propia página la tengo un poco descuidada. El tema me sigue interesando, y en cuando esté más desahogado seguiré adelante. Sobre el tema de la ordenación, me parece que se están complicando más de lo necesario. Creo que cuando no se trata de palabras normales la ordenación tendría que ser ascii. Otra cosa que he visto es que se ordena primero unos signos y luego las letras, pero no sería más lógico anteponer tan solo los signos abiertos y dejar los cerrados después de las letras ¿ :pensando: ? En español los signos cerrados se ponen después de las palabras (incluso en inglés ni se abren). Saludos y Felicidades :adios: P.D: furoya, ¿has vuelto a intentar enviar postales? |
Hola otra vez: A partir de otra pregunta, hemos preparado otros métodos. La pregunta: http://www.forosdelweb.com/f13/array-257337/ Y las respuestas ya la he puesto en Array.js... También modifiqué buscar para que devuelva el primer objeto igual y el último: Los scripts con objetos serían: Código: Array.prototype.buscarPrimerObjeto = function(objeto, dato) {Tal vez una buena posibilidad es buscar el primero mayor o igual y el último menor o igual, para evitar el índice -1. En la página que propuse antes ya implementé una búsqueda: http://www.pepemolina.com/arrays/index.html Saludos y Felicidades :adios: |
Hola todos : kepawe : estoy a punto de empezar a estudiar mejor tus códigos. Mis métodos me llevan siempre a callejones sin salida, y cuando encuentro un resquicio aparece otra "regla" de ordenación alfabética y tengo que rehacer todo otra vez. Es éso, o abandono hasta después de las vacaciones para poder pensar más claramente. caricatos : El problema del ASCII es que no es orden alfabético, por eso no sirve. De "casualidad" coinciden las letras en inglés si son todas mayúsculas ( o minúsculas ) por eso para ordenar se usa el truco de toUpperCase(); pero lo de los signos de apertura y cierre es algo atendíble. saludos y buen año para todos. furoya P.D. : ya probé lo de las tarjetas, te mando un MP con los detalles.Gracias. |
Acerca de los Arrays ??? :pensando: Una pregunta, he visto que estan batallando mucho con el orden de los arreglos, en este momento yo tengo el mismo problema deseo usar el .sort de javascript, porque esta compromado que es hasta 200 veces mas rapido que cualquier otro script programado por uno mismo, y bien, yo tengo esta idea, y quiero saber si ustedes que ya han visto este tema tantas veces, ya lo habian pensado, y si asi fue, si encontraron muchos problemas y por eso no la implementaron. 1. Crear una funcion que convierte todos los valores en el arreglo a su equivalente a un numero especifico. function arrArrayChangeValues(arrVar, intType) { arrCars = "A, B, C, D, E, F ...... " arrCarsIntegers = "1,2,3,4,5,6,7,7,9,10......" if (intType = 1) { //Decimos que hemos recibido un arreglo alfanumerico que debemos //cambiar por sus valores en INTEGER } else { //Decimos que hemos recibido un arreglo numerico que debemos //cambiar por sus valores en ALFANUMERICOS } } 2. Tenemos nuestro arreglo alfanumerico, entonces, llamamos a la funcion (1), para convertirlo a valores numericos. arrIntegerValues = arrArrayChangeValues(arrVarOriginal,1) 3. Aplicamos la funcion de JS para el sort numerico. arrIntegerValues.sort(function(a,b){return a-b;}) 4. Tenemos nuestro arreglo numerico correctamente ordenado, entonces, llamamos a la funcion (1), para convertirlo a valores alfanumericos. arrVarOriginal= arrArrayChangeValues(arrIntegerValues,2) 5. Y listo tenemos el arreglo correctamente ordenados... Observaciones.... 1. Porque estamos seguros que esta correctamente ordenado? R = Porque nosotros hemos asigando los valores numericos exactos que necesitamos. 2. Este es un algoritmo que cubre todos los casos, logicametne falta solo validar algunos casos y completar el codigo, pero me parece el mejor metodo para hacerlo.. Bueno, entonces por favor si alguien ya lo intento esto, digame que problemas encontro, porque lo veo como lo mas facil de lograr, de hecho los valores numericos pueden ser creados tambien con alguna funcion que se encargue de decir cosas como, "abc" > "y", pensando en unidades, decenas, centenas, etc. Bien son muchos casos que validar lo se, pero el metodo no lo vi en ninguno de sus comentarios, por eso lo pregunto, y si de algo les sirve, les dejo la idea para que la puedan revisar... por favor cualquier cosa contestenme, mi e-mail es [email protected] Necesito estar seguro de este metodo porque quiero cambiar mi actual metodo personal de SORT (Burbuja) a usar el SORT de JavaScript, porque bueno, les dejo el dato, esta comprobado que cualquier metodo programado por ti mismo, resulta 200 veces mas lento que el SORT basico que hace jsvascript. Entonces esa es la verdadera utilidad de todo esto. Gracias. Atte. Neuron_376 |
Hola Neuron_376 : la última idea era un orden alfabético. No sé si es lo que buscas, o simplemente ordenar caracteres según una secuencia que tu armas. puedes ver algo así en este mismo tema (p.e. en el mensaje #32). Allí no es necesario hacer un array de números, se usa uno de caracteres reordenados y se lee la ubicación (así se obtiene el número). También se puede usar su código unicode, en cuyo caso en orden será tipo ASCII. No es necesario poner tu e-mail, te podemos (debemos) responder aquí. saludos furoya |
| La zona horaria es GMT -6. Ahora son las 10:38. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.