Introducción a JavaScript

1

¿Por qué aprender JavaScript?

2

¡Hola Mundo! en Mac

3

¡Hola Mundo! en Windows

4

Anatomía de una variable

5

Tipos de datos en JavaScript

6

Creación de strings

7

Operadores aritméticos

8

Conversión de tipos: Type Casting y Coerción

9

Conversión de tipos explícita e implícita

Estructuras de Control y Lógica

10

Operadores de comparación

11

Operadores lógicos

12

Ejecución condicional: if

13

Ejercicio: Adivina el número

14

Ejecución condicional: switch

15

Loop: for

16

Loop: for of

17

Loop: for in

18

Loop: while

19

Loop: do while

Funciones y This

20

Anatomía de una función

21

Funciones vs Métodos

22

Funciones puras e impuras

23

Arrow function y enlace léxico

24

Contextos de ejecución y scope chain

25

¿Qué es Closure?

26

Preguntas a Desarrolladores Senior: ¿Por qué aprender Desarrollo Web?

Manipulación de Arrays

27

Introducción a Arrays

28

Mutabilidad e inmutabilidad de Arrays

29

Modificación básica del final con push( ), pop( )

30

Iteración con map( ) y forEach( )

31

Filtrado y reducción con filter( ) y reduce( )

32

Búsqueda de elementos con find( ) y findIndex( )

33

Crear copias con slice( )

34

Spread operator: casos de uso

Programación Orientada a Objetos

35

Anatomía de un Objeto

36

Trabajando con objetos en JavaScript

37

Función constructora

38

¿Qué es una clase?

39

Prototipos y herencias

40

Herencia en la práctica

41

Prototipos en la práctica

42

this en JavaScript

43

Proyecto: Crea una red social

44

Proyecto: Crea una red social parte 2

Asincronía en JavaScript

45

¿Cómo funciona el JavaScript Engine?

46

Promesas en JavaScript

47

Usando Async y await en JavaScript

48

For await of

49

¿Cómo funciona la web?

50

¿Cómo funciona HTTP?

51

Método GET en JavaScript

52

Método POST en JavaScript

53

Método DELETE en JavaScript

54

Importancia del id en el método DELETE

55

ECMAScript 6 y tus siguientes pasos

You don't have access to this class

Keep learning! Join and start boosting your career

Aprovecha el precio especial y haz tu profesión a prueba de IA

Antes: $249

Currency
$209
Suscríbete

Termina en:

2 Días
13 Hrs
20 Min
10 Seg

Filtrado y reducción con filter( ) y reduce( )

31/55
Resources

What are the Filter and Reduce methods and how do they work?

Welcome programming enthusiasts! Today we will explore two fundamental methods of arrays in JavaScript: Filter and Reduce. Both are powerful tools that do not alter the original array, allowing you to filter and reduce data efficiently. They enrich list management by providing flexibility in dealing with complex data, making them indispensable in any developer's arsenal.

How to use the Filter method?

The Filter method creates a new array with all the elements that pass the condition implemented in the provided test function. Imagine having an array of numbers and wanting only those that meet a certain condition, such as being greater than a specific number.

Basic Filter example

Let's see a practical and simple example:

let numbers = [2, 3, 4, 5, 6, 7, 8, 9, 10];let evenNumbers = numbers.filter(number => number % 2 === 0);console.log(evenNumbers); // Output: [2, 4, 6, 8, 10].

In this code block, filter receives an arrow function that evaluates whether each number in the array is even (i.e., the modulus of 2 is zero), returning a new array with these even numbers.

What is the Reduce method?

Unlike Filter, the Reduce method takes an array and reduces it to a single value by applying a function that runs on each value in the array, from left to right. A classic use of reduce is to sum all the elements of an array.

Basic example of reduce

Let's look at how reduce works when adding numbers:

const numbersReduce = [1, 2, 3, 4, 5];const sum = numbersReduce.reduce((accumulator, currentValue) => accumulator + currentValue, 0);console.log(sum); // Output: 15.

Here, reduce accumulates each array value in the accumulator starting from zero(initialValue) until the total sum of the array is achieved.

What other applications does reduce have?

Reduce is versatile and can be used for more complex cases, such as counting the frequency of word occurrences in an array. This transforms a potentially complex problem into an elegant and concise solution.

Counting elements with Reduce

Let's see how to count how many times each word in an array is repeated:

const words = ['apple', 'banana', 'hello', 'bye', 'banana', 'bye', 'bye ', 'bye'];const wordFrequency = words.reduce((accumulator, currentValue) => { accumulator[currentValue] = (accumulator[currentValue] || 0) + 1; return accumulator;}, {});
console.log(wordFrequency); // Output: { apple: 1, banana: 2, hello: 1, bye: 3 }

In this example, we use an object as an accumulator where each time we find a word, we increment its count in the object, thus obtaining the frequency of each word.

Delving into the world of Filter and Reduce will give you valuable skills to manipulate arrays efficiently, making your lines of code more streamlined and powerful, so go ahead and keep exploring and experimenting with these methods!

Contributions 26

Questions 0

Sort by:

Want to see more contributions, questions and answers from the community?

Proceso de `reduce`: 1. **Inicio:** El `accumulator` es `{}`. 2. **Primera iteración:** * `currentValue` es `'apple'`. * `accumulator['apple']` no existe, así que se establece `accumulator['apple'] = 1`. * `accumulator` ahora es `{'apple': 1}`. 3. **Segunda iteración:** * `currentValue` es `'banana'`. * `accumulator['banana']` no existe, así que se establece `accumulator['banana'] = 1`. * `accumulator` ahora es `{'apple': 1, 'banana': 1}`. 4. **Tercera iteración:** * `currentValue` es `'hello'`. * `accumulator['hello']` no existe, así que se establece `accumulator['hello'] = 1`. * `accumulator` ahora es `{'apple': 1, 'banana': 1, 'hello': 1}`. 5. **Cuarta iteración:** * `currentValue` es `'bye'`. * `accumulator['bye']` no existe, así que se establece `accumulator['bye'] = 1`. * `accumulator` ahora es `{'apple': 1, 'banana': 1, 'hello': 1, 'bye': 1}`. 6. **Quinta iteración:** * `currentValue` es `'banana'`. * `accumulator['banana']` existe, así que se incrementa `accumulator['banana']` en 1. * `accumulator` ahora es `{'apple': 1, 'banana': 2, 'hello': 1, 'bye': 1}`. 7. **Sexta iteración:** * `currentValue` es `'bye'`. * `accumulator['bye']` existe, así que se incrementa `accumulator['bye']` en 1. * `accumulator` ahora es `{'apple': 1, 'banana': 2, 'hello': 1, 'bye': 2}`. 8. **Séptima iteración:** * `currentValue` es `'bye'`. * `accumulator['bye']` existe, así que se incrementa `accumulator['bye']` en 1. * `accumulator` ahora es `{'apple': 1, 'banana': 2, 'hello': 1, 'bye': 3}`.
Shortcut de `console.log` en VisualStudioCode: **-> clg** \*\* Solo funciona habiendo instalado previamente la extensión `JavaScript (ES6) code snippets`
Tanto \*\*`filter()`\*\* como \*\*`reduce()`\*\* son métodos poderosos en JavaScript que permiten manipular arrays de manera efectiva, pero tienen propósitos muy distintos. \### \*\*1. `filter()`\*\* El método \*\*`filter()`\*\* se utiliza para \*\*filtrar los elementos de un array\*\* que cumplen con una condición específica. Devuelve un \*\*nuevo array\*\* con los elementos que pasen el filtro (es decir, aquellos para los que la función de filtro devuelva `true`). \*\*Ejemplo:\*\* ```javascript let numbers = \[1, 2, 3, 4, 5, 6]; // Filtrar los números pares let evenNumbers = numbers.filter(function(number) { return number % 2 === 0; }); console.log(evenNumbers); ``` \*\*Salida:\*\* ``` \[2, 4, 6] ``` \*\*Características de `filter()`\*\*: \- Devuelve un \*\*nuevo array\*\* con los elementos que cumplen la condición. \- No modifica el array original. \- Si ningún elemento cumple la condición, devuelve un array vacío. \### \*\*2. `reduce()`\*\* El método \*\*`reduce()`\*\* se utiliza para \*\*reducir\*\* un array a un solo valor, como la suma de sus elementos, un producto, o incluso un objeto o array. Funciona aplicando una función acumulativa a los elementos del array, lo que permite obtener un resultado único basado en todos los elementos. \*\*Ejemplo:\*\* ```javascript let numbers = \[1, 2, 3, 4, 5]; // Sumar todos los números del array let sum = numbers.reduce(function(accumulator, currentValue) { return accumulator + currentValue; }, 0); console.log(sum); ``` \*\*Salida:\*\* ``` 15 ``` \*\*Características de `reduce()`\*\*: \- Devuelve un \*\*único valor\*\* (puede ser un número, string, objeto, array, etc.). \- Tiene un \*\*acumulador\*\* que almacena el resultado de cada iteración. \- Requiere un \*\*valor inicial\*\* (en este caso `0`), que es el valor inicial del acumulador. \- Puede ser más complejo, pero es extremadamente útil para realizar operaciones como sumar, concatenar, combinar elementos, o incluso construir objetos a partir de un array. \### \*\*Diferencias clave entre `filter()` y `reduce()`\*\*: \- \*\*Propósito\*\*: \- `filter()` se utiliza para \*\*filtrar\*\* elementos de un array y devolver un nuevo array que solo contiene los elementos que cumplen la condición. \- `reduce()` se utiliza para \*\*reducir\*\* el array a un único valor acumulado (como una suma, producto o cualquier otra operación agregada). \- \*\*Resultado\*\*: \- `filter()` devuelve un \*\*nuevo array\*\* con los elementos que cumplen la condición. \- `reduce()` devuelve \*\*un solo valor\*\* que es el resultado de aplicar la función de acumulación. \### Ejemplo comparativo: \*\*`filter()` para filtrar números mayores a 2:\*\* ```javascript let numbers = \[1, 2, 3, 4, 5]; let filteredNumbers = numbers.filter(function(number) { return number > 2; }); console.log(filteredNumbers); // \[3, 4, 5] ``` \*\*`reduce()` para sumar todos los números:\*\* ```javascript let numbers = \[1, 2, 3, 4, 5]; let sum = numbers.reduce(function(accumulator, number) { return accumulator + number; }, 0); console.log(sum); // 15 ``` \### \*\*Usos típicos:\*\* \- \*\*`filter()`\*\*: \- Para extraer elementos que cumplen ciertas condiciones. \- Ejemplo: Filtrar productos con un precio mayor a cierto valor, o filtrar estudiantes con notas superiores a un umbral. \- \*\*`reduce()`\*\*: \- Para obtener un solo valor a partir de un array. \- Ejemplo: Sumar todos los valores de un array, calcular el total de ventas, o construir un objeto a partir de un array de datos. \### Ejemplo más avanzado de `reduce()`: \*\*Convertir un array de objetos en un objeto con `reduce()`:\*\* ```javascript let people = \[ { name: 'Alice', age: 25 }, { name: 'Bob', age: 30 }, { name: 'Charlie', age: 35 } ]; // Crear un objeto donde los nombres son claves y las edades son valores let peopleObject = people.reduce(function(acc, person) { acc\[person.name] = person.age; return acc; }, {}); console.log(peopleObject); ``` \*\*Salida:\*\* ``` { Alice: 25, Bob: 30, Charlie: 35 } ``` \### Conclusión: \- Usa \*\*`filter()`\*\* cuando necesites \*\*extraer\*\* elementos específicos de un array. \- Usa \*\*`reduce()`\*\* cuando necesites \*\*agregar o combinar\*\* todos los elementos del array en un solo valor o resultado.
No termino de entender bien como funciona **reduce()**. Estoy buscando un sitio donde lo expliquen de mejor manera
Excelente explicación y buena onda 😎
Quiero compartir con ustedes un ejercicio "avanzado" para el uso de reduce que se me ocurrió mientras veía esta clase. ```js /* El siguiente ejemplo será avanzado, tendremos un array de personas con los atributos nombre, edad y sexo (representados por las letras F y M), y aplicaremos el método reduce() para contar la cantidad de personas del sexo femenino, del sexo masculino y los menores de 16 años. Note el valor inicial del acumulador, se trata de un objeto con tantos atributos para cada contador. */ const people = [ { name: 'John', age: 32, gender: 'M', }, { name: 'Charlie', age: 15, gender: 'F', }, { name: 'Susan', age: 10, gender: 'F', }, { name: 'Max', age: 42, gender: 'M', }, { name: 'Louis', age: 13, gender: 'F', }, { name: 'Erika', age: 18, gender: 'F', }, { name: 'Richard', age: 60, gender: 'M', }, { name: 'Lucas', age: 12, gender: 'M', }, { name: 'Maria', age: 23, gender: 'F', }, { name: 'Angel', age: 19, gender: 'M', }, { name: 'Miriam', age: 39, gender: 'F', }, { name: 'Lina', age: 48, gender: 'F', }, ] const peopleCounterByConditions = people.reduce((counter, currentPeople) => { if (currentPeople.gender === "F") counter.females+= 1 if (currentPeople.gender === "M") counter.males+= 1 if (currentPeople.age < 16) counter.underAge += 1 return counter }, { males: 0, females: 0, underAge: 0, }) console.log(people); console.log(peopleCounterByConditions); ```/\* El siguiente ejemplo será avanzado, tendremos un array de personas con los atributos nombre, edad y sexo (representados por las letras F y M), y aplicaremos el método reduce() para contar la cantidad de personas del sexo femenino, del sexo masculino y los menores de 16 años. Note el valor inicial del acumulador, se trata de un objeto con tantos atributos para cada contador.\*/ *const* people = \[ { name: 'John', age: 32, gender: 'M', }, { name: 'Charlie', age: 15, gender: 'F', }, { name: 'Susan', age: 10, gender: 'F', }, { name: 'Max', age: 42, gender: 'M', }, { name: 'Louis', age: 13, gender: 'F', }, { name: 'Erika', age: 18, gender: 'F', }, { name: 'Richard', age: 60, gender: 'M', }, { name: 'Lucas', age: 12, gender: 'M', }, { name: 'Maria', age: 23, gender: 'F', }, { name: 'Angel', age: 19, gender: 'M', }, { name: 'Miriam', age: 39, gender: 'F', }, { name: 'Lina', age: 48, gender: 'F', },] *const* peopleCounterByConditions = people.reduce((*counter*, *currentPeople*) *=>* { if (*currentPeople*.gender === "F") *counter*.females+= 1 if (*currentPeople*.gender === "M") *counter*.males+= 1 if (*currentPeople*.age < 16) *counter*.underAge += 1 return *counter*}, { males: 0, females: 0, underAge: 0,}) console.log(people);console.log(peopleCounterByConditions);
![](https://static.platzi.com/media/user_upload/image-24f894c8-be0a-44de-b6bf-342d7002ed37.jpg)
Hola! Puedes aprender más sobre estos dos métodos consultando su documentación: * 📃 [.filter()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) * 📃 [.reduce()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce) Aquí te dejo mi versión de apuntes de esta clase! ![](https://i.imgur.com/w5YzYlj.png)
## Métodos de Arrays en JavaScript: Filter y Reduce ### Filter * El método `Filter` en JavaScript se utiliza para crear un nuevo array con todos los elementos que pasan una prueba (condición) implementada por una función proporcionada. * `Filter` no modifica el array original. ### Ejemplo de uso de Filter * Dado un array de números: `[2, 4, 8, 10, 12]`, queremos crear un nuevo array con números mayores a 5. * Implementación en código:const numbers = \[2, 3, 4, 5, 8, 9, 10]; const evenNumbers = numbers.filter(number => number % 2 === 0); console.log(evenNumbers); // \[2, 4, 8, 10] * En este ejemplo, `evenNumbers` contiene solo los números pares del array original. ### Concepto de módulo * El operador módulo `%` devuelve el residuo de una división. * Ejemplo: `4 % 2 = 0` (4 es divisible por 2, residuo 0), `5 % 2 = 1` (5 no es divisible por 2, residuo 1). * Utilizando este operador, podemos identificar números pares (módulo 0) y números impares (módulo distinto de 0). ### Reduce * El método `Reduce` en JavaScript se utiliza para ejecutar una función reductora sobre cada elemento de un array, resultando en un único valor. * `Reduce` no modifica el array original. ### Ejemplo de uso de Reduce * Dado un array de números: `[1, 2, 3, 4, 5]`, queremos obtener la suma de todos los elementos. * Implementación en código:const numbersReduce = \[1, 2, 3, 4, 5]; const sum = numbersReduce.reduce((accumulator, currentValue) => accumulator + currentValue, 0); console.log(sum); // 15 * En este ejemplo, `sum` es la suma de todos los números en el array original. ### Contar la frecuencia de palabras con Reduce * Dado un array de palabras: `["apple", "banana", "hello", "bye", "banana", "bye", "bye"]`, queremos contar la frecuencia de cada palabra. * Implementación en código:const words = \["apple", "banana", "hello", "bye", "banana", "bye", "bye"]; const wordFrequency = words.reduce((accumulator, currentValue) => { if (accumulator\[currentValue]) { accumulator\[currentValue]++; } else { accumulator\[currentValue] = 1; } return accumulator; }, {}); console.log(wordFrequency); // { apple: 1, banana: 2, hello: 1, bye: 3 } * En este ejemplo, `wordFrequency` es un objeto que muestra cuántas veces se repite cada palabra en el array original.
Ustedes sabian que el typeof(NaN) es number? A![](https://static.platzi.com/media/user_upload/Screenshot%20from%202024-07-31%2014-38-44-2d3ae60f-652b-41b2-ba61-27f65d59b872.jpg)qui dejo un ejemplo de como filtrar los numeros de un array mixto.
Alguien podría explicarme porque hasta de último coloca { } dos corchetes vacíos? Es lo único que no comprendo
Practicando me he encontrado con este ejercicio en cual nos pide que devuelva la suma de todos los múltiplos de 3 o 5 menores que el número pasado como argumento.Y utilizando esta funcion que utiliza los metodos de la clase reduce() y filter() se llega una logica muy simple `function solution(number`){ ` return number < 1 ? 0 : [...new Array(number).keys()].filter(n => n % 3 == 0 || n % 5 == 0).reduce((a, b) => a + b`); `}`
Para esta clase sobre el reduce() hay que entender como acceder a las propiedades de un objeto digamos que tienes un objeto con clave y valor de frutas: `const frutas = {` ` apple: 0,` ` banana: 0,` ` lemon: 0` `}` La forma de acceder al valor de apple normalmente es `` `frutas.apple // dara un 0 en este ejemplo,` `` pero no solo puedes acceder a traves de su propiedad sino con un string y en corchetes como si fuera el indice de un arreglo (obviamente no lo es) `` `frutas['apple'] // igualmente un cero` `` Etonces reduce lo que hizo es que: \* Primeramente no devuelve un valor como number o string, definimos que devuelve un valor si pero ese valor sera un objeto {} \* Lo que hace reduce es que leera `accumulator['apple']` pero no existe dentro del objeto entonces la primer condicion dice que si no existe lo acumula y le incrementa uno al valor de esa propiedad `accumulator[currentValue]++ `es como decir accumulator (recuerda que acumulator es un objeto porque asi lo definimos) `accumulator['apple'] = accumulator\['apple'] + 1 `entonces quedaria `{'apple' : 1} `, entonces si no existe le agregamos simplemente un uno a la propiedad apple y si existe de nuevo utilizamos el contador para sumar pero como ya existe simplemente incrementamos el valor de la propiedad \* En resumen creo que el ejemplo del reduce no se entendio bien, porque se esta trabajando tambien con objetos
Creo que el ejemplo del reducer no se entiende del todo porque se esta trabajando con objetos, hay que saber las formas en las que se llama a la propiedad de un objeto y con eso se entenderá mejor
![](https://static.platzi.com/media/user_upload/Captura%20de%20pantalla%202025-01-28%20160922-41b651f1-f982-41c9-be9d-1a38616860af.jpg)
abecés estoy escribiendo un código y de repente la linea de escribir se pone a parpadear y si quiero modificar una palabra la empieza a borrar, como quito eso? hay alguna configuración![]()![](<Captura de pantalla 2025-01-24 200632>) de botones ![]()
Me parece interesente el ejercicio de la función reduce(), puesto que en mi trabajo me encontré con un problema similar, pero aproximación fue un poco diferente, usando un Map para hacer ese registro, Map\<string, number>, y este Map se llenaba en un forEach, por ejemplo, en word.forEach(...) para llenar el Map y luego otro un word.filter(...) usando el Map como condición.
Me confunde el parámetro *accumulator\[currentValue]* en el segundo ejemplo, a primera vista lo veo como el elemento de un array de nombre *accumulator*. Si alguien me ayuda a entender esa parte, lo agradecería un montón.
Reduce es una método para "reducir" arreglos (valga la redundancia) Donde la "reducción" típicamente se usa para llegar a un solo valor, pero no es necesariamente así: se puede usar un reduce para implementar un map o crear un objeto aún más "grande" reduce toma dos argumentos: - una función reductora - el valor inicial del acumulador La función reductora recibe dos valores: - el acumulador - el objeto actual. Sobre dicha función reductora: - Debe retornar el valor siguiente para el acumulador. - No importa el tipo de dato del acumulador, ni de los valores del arreglo, ni del valor que retorna; siempre y cuando sean coherentes con el funcionamiento interno de la función reductora, y con lo que consideremos que debe de obtenerse al final de la reducción
🟡 **No recomiendo utilizar 'reduce' para frecuencias** No lo recomiendo porque su sintaxis es confusa y puede ser muy complicada de leer en algunos problemas. Yo recomiendo utilizarlo únicamente para **reducir a un solo valor.** Es mejor realizar un `for...of` con un objeto inicial. ```js const wordFrecuency = {} for (let word of words){ if (!wordFrecuency[word]){ wordFrecuency[word] = 0 } wordFrecuency[word]++ } ``` Incluso si conoces el operador nullish el código puede reducirse a: ```js for (let word of words){ wordFrecuency[word] = (wordFrecuency[word] ?? 0) +1 } ``` O también utilizando operadores de asignación avanzados: ```js for (let word of words){ wordFrecuency[word] ??= 0 wordFrecuency[word]++ } ``` Como prefieras, lo importante es crear código que se pueda **leer fácilmente**. ¡Nunca pares de aprender! 💚
![](https://static.platzi.com/media/user_upload/image-de2ed71c-d9fa-49c1-8c32-6f2eb20e2968.jpg) ![](https://static.platzi.com/media/user_upload/image-92e2b29a-a3a1-40b3-a16c-513a1dbbb7cf.jpg)
* Estructura del metodo inmutable 'reduce': ```js const result = arreglo.reduce( (acum, element) => { // Interaccion con mis 2 variables }, acumValInicial) ``` * El acumValInicial define el tipo de variable de acum y en redundancia, el valor inicial de acum. * Si no se asigna el valor de acumValInicial, este tomara el valor inicial del primer elemento del arreglo y la iteracion comenzara con el segundo elemento. * Este metodo reducer retorna el ultimo valor de acum.
**RESUMEN:** ![](https://static.platzi.com/media/user_upload/image-ac07c23c-14f8-4f5b-8a0c-17cb7cb4b551.jpg) ![](https://static.platzi.com/media/user_upload/image-9ea70b0d-a85b-449b-a22c-e7c82c996d22.jpg)
no entendi lo del objeto vacio :( y el return lo demas si
El módulo `%` estaría mejor si lo agregaran en la sección de `Introduccion de JavaScript` he conocido muchas personas que se les olvida el `%` (también me ha pasado jaja). Como se vio en la clase, ese signo nos puede quitar muchas condicionales cuando programamos algo.
Les presento mi ejemplo practico ![]()![](https://static.platzi.com/media/user_upload/image-8abb41a3-c0bb-4c66-abc2-c1c693759150.jpg)