Herramientas de usuario

Herramientas del sitio


informatica:programacion:cursos:programacion_avanzada_javascript:matrices

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
informatica:programacion:cursos:programacion_avanzada_javascript:matrices [2024/10/03 10:21] – [Ordenación] tempwininformatica:programacion:cursos:programacion_avanzada_javascript:matrices [2024/10/30 15:23] (actual) – [Prácticas propuestas para este módulo] tempwin
Línea 360: Línea 360:
 fruta.sort(compararFruta); // -> Uva, Pera, Naranja, Melocotón, Fruta de la pasión fruta.sort(compararFruta); // -> Uva, Pera, Naranja, Melocotón, Fruta de la pasión
 </code> </code>
-===== Búsqueda =====+==== Búsqueda ==== 
 + 
 +Para **localizar un elemento** en una matriz, podemos usar el método ''indexOf'' que nos devolverá, si lo encuentra, la posición que ocupa el elemento a buscar: 
 + 
 +<code javascript> 
 +var matriz = [8, 99, "ab", "cinco", 10, 41, 1]; 
 + 
 +alert(matriz.indexOf(1)); // -> 6 
 + 
 +// Si buscamos algo que no está, devolverá -1 
 +alert(matriz.indexOf("hola"); // -> -1 
 +</code> 
 + 
 +Para hacer una búsqueda desde el final de la matriz, usaremos el método ''lastIndexOf'': 
 + 
 +<code javascript> 
 +var matriz = [8, 99, "ab", "cinco", 10, 41, 1, 0, 1]; 
 + 
 +alert(matriz.lastIndexOf(1)); // -> 0 
 +</code> 
 + 
 +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, "ab", "cinco", 1, 10, 41, 1, 0, 1]; 
 + 
 +alert(matriz.indexOf(1,5)); // -> 7 
 +</code> 
 + 
 +Podemos escribir una función que encuentre todos los elementos de un determinado tipo que haya en una matriz: 
 + 
 +<code javascript> 
 +function encontrarTodos(elemento, matriz) { 
 +    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, ++pos); 
 +    } 
 +     
 +    return encontrados; 
 +
 +</code> 
 + 
 +Para probarla: 
 + 
 +<code javascript> 
 +var matriz = [8, 99, "ab", "cinco", 10, 41, 1, 0, 1]; 
 + 
 +encontrarTodos(1, matriz); // -> 6,8 (posiciones en las que hay un 1 
 +</code> 
 +==== Procesamiento de elementos ==== 
 + 
 +El método ''filter'' permite filtrar una matriz y extraer de ella los elementos que cumplan una determinada condición: 
 + 
 +<code javascript> 
 +var matriz = [1,2,3,4,5,6,7,8,9,10]; 
 + 
 +function esPar(n) { 
 +    if ((n % 2) == 0) { 
 +        return true; 
 +    } else { 
 +        return false; 
 +    } 
 +
 + 
 +var numerosPares = matriz.filter(esPar());  
 +alert(numerosPares); // -> 2,4,6,8,10 
 +</code> 
 + 
 +<WRAP center round info 60%> 
 +''filter'' no modifica la matriz original. Solo extraer los elementos. 
 +</WRAP> 
 + 
 +El método ''some'' sirve para indicar si algún elemento de la matriz cumple lo que la función que le pasemos. 
 + 
 + 
 +<code javascript> 
 +var matriz = [1,2,3,4,5,6,7,8,9,10]; 
 + 
 +function esPar(n) { 
 +    if ((n % 2) == 0) { 
 +        return true; 
 +    } else { 
 +        return false; 
 +    } 
 +
 + 
 +alert(matriz.some(esPar); // -> true 
 +</code> 
 + 
 +Parecido a ''some'' está ''every'', pero indica si todos y cada uno de los elementos de la matriz cumplen la función que le pasemos: 
 + 
 +<code javascript> 
 +var matriz = [1,2,3,4,5,6,7,8,9,10]; 
 + 
 +function esPar(n) { 
 +    if ((n % 2) == 0) { 
 +        return true; 
 +    } else { 
 +        return false; 
 +    } 
 +
 + 
 +alert(matriz.every(esPar); // -> false 
 +</code> 
 + 
 +Otra función interesante de procesamiento es ''map'', que asocia elementos de la matriz a la función que le indiquemos. 
 + 
 +<code javascript> 
 +var matriz = [1,2,3,4,5,6,7,8,9,10]; 
 + 
 +// Queremos hacer el doble de cada elemento 
 +function elDoble(n) { 
 +    return n * 2; 
 +
 + 
 +var res matriz.map(elDoble); 
 +alert(res); // -> 2,4,6,8,10,12,14,18,20 
 +</code> 
 + 
 +<WRAP center round info 60%> 
 +''map'' no modifica la matriz original. 
 +</WRAP>
  
-===== Procesamiento de elementos ===== 
  
   * [[https://es.wikipedia.org/wiki/MapReduce|MapReduce]] (Wikipedia)   * [[https://es.wikipedia.org/wiki/MapReduce|MapReduce]] (Wikipedia)
 +
 +Finalmente, está el método ''forEach'', que se parece mucho a ''map'', pero no devuelve nada.
 +
 +<code javascript>
 +var matriz = [1,2,3,5];
 +
 +function mostrar(e, indice) {
 +    alert("El elemento [" + indice + "] tiene el valor: " + e);
 +}
 +
 +matriz.forEach(mostrar); // -> El elemento [0] tiene el valor: 1, etc
 +</code>
 +
 +===== 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 "n" filas por "m" columnas. Debes tener cuidado porque no es posible multiplicar entre sí matrices de cualquier dimensión, así que habrá que comprobarlo. Además deberás comprobar que todos los elementos son números. Si necesitas ayuda para aprender a multiplicar matrices, [[https://es.wikipedia.org/wiki/Multiplicaci%C3%B3n_de_matrices|este enlace]] te puede resultar útil. Y para verlo más gráficamente y paso a paso, [[http://matrixmultiplication.xyz/|esta herramienta]] es sensacional.
 +  * ¿De qué manera podrías hacer que una matriz compuesta de números exclusivamente, se pudiera ordenar considerando sus valores, es decir, sin considerar que son cadenas como hace ''sort'' por defecto? Si tienes que escribir una función de ordenación, ¿cuál sería la función más simple que podrías escribir? (pista, tendría únicamente una línea).
 +  * Crea una función que permita filtrar cualquier matriz con ''filter'' y devuelva únicamente los elementos numéricos que ésta contenga, desechando los que no sean de este tipo de datos.
 +
 +<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í).</WRAP>
 +
 +===== Recursos =====
 +
 +  * [[https://en.wikipedia.org/wiki/Stack_(abstract_data_type)|Pila LIFO o stack]]
 +  * [[https://en.wikipedia.org/wiki/Queue_(abstract_data_type)|Pila FIFO o cola]]
 +  * [[https://es.wikipedia.org/wiki/MapReduce|MapReduce]]
informatica/programacion/cursos/programacion_avanzada_javascript/matrices.1727943717.txt.gz · Última modificación: por tempwin