informatica:programacion:cursos:programacion_avanzada_javascript:matrices
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| informatica:programacion:cursos:programacion_avanzada_javascript:matrices [2024/10/03 10:07] – [Procesamiento de elementos] tempwin | informatica:programacion:cursos:programacion_avanzada_javascript:matrices [2024/10/30 15:23] (actual) – [Prácticas propuestas para este módulo] tempwin | ||
|---|---|---|---|
| Línea 319: | Línea 319: | ||
| * [[https:// | * [[https:// | ||
| - | ===== Ordenación | + | ==== Ordenación ==== |
| - | ===== Búsqueda ===== | + | JavaScript ofrece varios métodos para la ordenación de los elementos de una matriz. |
| + | |||
| + | '' | ||
| + | |||
| + | <code javascript> | ||
| + | var matriz | ||
| + | matriz.reverse(); | ||
| + | alert(matriz); | ||
| + | </ | ||
| + | |||
| + | Para ordenar los elementos de una matriz, de menor a mayor, utilizamos '' | ||
| + | |||
| + | <code javascript> | ||
| + | var matriz = [1, 4, 6, 3, 10]; | ||
| + | matriz.sort(); | ||
| + | alert(matriz); | ||
| + | </ | ||
| + | |||
| + | <WRAP center round important 60%> | ||
| + | El método transforma los elementos a cadenas de texto y la ordenación se hace por esas cadenas. El código UTF-16 del 10 es menor que el 3, por eso va primero. | ||
| + | </ | ||
| + | |||
| + | Si queremos ordenar por longitud de las cadenas: | ||
| + | |||
| + | <code javascript> | ||
| + | var frutas = [" | ||
| + | |||
| + | function compararFruta(f1, | ||
| + | if (f1.length > f2.length) { | ||
| + | return 1; | ||
| + | } else if (f1.length < f2.length) { | ||
| + | return -1 | ||
| + | } else { | ||
| + | return 0; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | fruta.sort(compararFruta); | ||
| + | </ | ||
| + | ==== Búsqueda ==== | ||
| + | |||
| + | Para **localizar un elemento** en una matriz, podemos usar el método '' | ||
| + | |||
| + | <code javascript> | ||
| + | var matriz = [8, 99, " | ||
| + | |||
| + | alert(matriz.indexOf(1)); | ||
| + | |||
| + | // Si buscamos algo que no está, devolverá -1 | ||
| + | alert(matriz.indexOf(" | ||
| + | </ | ||
| + | |||
| + | Para hacer una búsqueda desde el final de la matriz, usaremos el método '' | ||
| + | |||
| + | <code javascript> | ||
| + | var matriz = [8, 99, " | ||
| + | |||
| + | alert(matriz.lastIndexOf(1)); | ||
| + | </ | ||
| + | |||
| + | Podemos indicar, como segundo argumento, dónde debe empezar a buscar, es decir, a partir de qué elemento empezaría a buscar: | ||
| + | |||
| + | <code javascript> | ||
| + | var matriz = [8, 99, " | ||
| + | |||
| + | alert(matriz.indexOf(1, | ||
| + | </ | ||
| + | |||
| + | Podemos escribir una función que encuentre todos los elementos de un determinado tipo que haya en una matriz: | ||
| + | |||
| + | <code javascript> | ||
| + | function encontrarTodos(elemento, | ||
| + | var encontrados = []; | ||
| + | var pos = matriz.indexOf(elemento); | ||
| + | // Si el elemento no está, devolverá -1. | ||
| + | // Si está, nos devolverá la posición | ||
| + | while (pos != -1) { | ||
| + | encontrados.push(pos); | ||
| + | // Tenemos que seguir buscando tras la primera ocurriencia | ||
| + | pos = matriz.indexOf(elemento, | ||
| + | } | ||
| + | |||
| + | return encontrados; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Para probarla: | ||
| + | |||
| + | <code javascript> | ||
| + | var matriz = [8, 99, " | ||
| + | |||
| + | encontrarTodos(1, | ||
| + | </ | ||
| + | ==== Procesamiento de elementos ==== | ||
| + | |||
| + | El método '' | ||
| + | |||
| + | <code javascript> | ||
| + | var matriz = [1, | ||
| + | |||
| + | function esPar(n) { | ||
| + | if ((n % 2) == 0) { | ||
| + | return true; | ||
| + | } else { | ||
| + | return false; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | var numerosPares = matriz.filter(esPar()); | ||
| + | alert(numerosPares); | ||
| + | </ | ||
| + | |||
| + | <WRAP center round info 60%> | ||
| + | '' | ||
| + | </ | ||
| + | |||
| + | El método '' | ||
| + | |||
| + | |||
| + | <code javascript> | ||
| + | var matriz = [1, | ||
| + | |||
| + | function esPar(n) { | ||
| + | if ((n % 2) == 0) { | ||
| + | return true; | ||
| + | } else { | ||
| + | return false; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | alert(matriz.some(esPar); | ||
| + | </ | ||
| + | |||
| + | Parecido a '' | ||
| + | |||
| + | <code javascript> | ||
| + | var matriz = [1, | ||
| + | |||
| + | function esPar(n) { | ||
| + | if ((n % 2) == 0) { | ||
| + | return true; | ||
| + | } else { | ||
| + | return false; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | alert(matriz.every(esPar); | ||
| + | </ | ||
| + | |||
| + | Otra función interesante de procesamiento es '' | ||
| + | |||
| + | <code javascript> | ||
| + | var matriz = [1, | ||
| + | |||
| + | // Queremos hacer el doble de cada elemento | ||
| + | function elDoble(n) { | ||
| + | return n * 2; | ||
| + | } | ||
| + | |||
| + | var res = matriz.map(elDoble); | ||
| + | alert(res); // -> 2, | ||
| + | </ | ||
| + | |||
| + | <WRAP center round info 60%> | ||
| + | '' | ||
| + | </ | ||
| - | ===== Procesamiento de elementos ===== | ||
| * [[https:// | * [[https:// | ||
| + | |||
| + | Finalmente, está el método '' | ||
| + | |||
| + | <code javascript> | ||
| + | var matriz = [1,2,3,5]; | ||
| + | |||
| + | function mostrar(e, indice) { | ||
| + | alert(" | ||
| + | } | ||
| + | |||
| + | matriz.forEach(mostrar); | ||
| + | </ | ||
| + | |||
| + | ===== Prácticas propuestas para este módulo ===== | ||
| + | |||
| + | En este módulo hemos estudiado las matrices y sus principales métodos de trabajo. | ||
| + | |||
| + | Para asentar los conocimientos te sugerimos los siguientes ejercicios prácticos: | ||
| + | |||
| + | * Crea una función que tome como parámetro una matriz y calcule el máximo de los elementos que ésta contiene, desechando los que NO son números. Lo mismo para el mínimo. ¿Has tenido en cuenta todas las posibles circunstancias (por ejemplo que no haya ningún número, que todos los números sean iguales...? ¿Funcionaría tu función en estos casos? | ||
| + | * Crea una función que permita multiplicar una matriz lineal (de una sola dimensión) por cualquier número. | ||
| + | * Crea una función para multiplicar entre sí dos matrices cualesquiera de " | ||
| + | * ¿De qué manera podrías hacer que una matriz compuesta de números exclusivamente, | ||
| + | * Crea una función que permita filtrar cualquier matriz con '' | ||
| + | |||
| + | <WRAP center round tip 60%> | ||
| + | Las prácticas sugeridas al final de cada módulo son propuestas para que, si tienes tiempo, puedas reforzar lo aprendido con prácticas específicamente diseñadas para el contenido del módulo. No obstante, en este curso como el tiempo es algo justo **puedes saltártelas o dejarlas para más adelante**, especialmente estas del principio, que son cuestiones más básicas. En cualquier caso **no es necesario que las envíes** al tutor y **no cuentan para la nota**: son para que practiques por tu cuenta y refuerces conocimientos. | ||
| + | |||
| + | Si las haces y te atascas con alguna o tienes alguna duda el tutor está para ayudarte a través de mensajería interna (recuerda: las cosas relacionadas con las prácticas, mejor que no las preguntes en los foros públicos: lo demás sí).</ | ||
| + | |||
| + | ===== Recursos ===== | ||
| + | |||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
informatica/programacion/cursos/programacion_avanzada_javascript/matrices.1727942865.txt.gz · Última modificación: por tempwin
