Cómo simplificar tu código con map(), reduce() y filter() en JavaScript

· 3 min de lectura
Cómo simplificar tu código con map(), reduce() y filter() en JavaScript

He visto mucho código de sentencias entre 8 y 10 lineas para realizar un bucle, solo para resolver una tarea cualquiera en la que Array.reduce podría hacerlo en una sola línea.

¡Empecemos!

1. Eliminar duplicados de un array

Bueno, este es el único que no tiene nada que ver con map/reduce/filter, pero es tan compacto que es difícil no ponerlo en la lista. Nos permite eliminar números/textos duplicados de una Array.

— Ejemplo

const valores = [3, 1, 3, 5, 2, 4, 4, 4];
const unicosValores = [...new Set(values)];

console.log(unicosValores);
// [3, 1, 5, 2, 4]

2. Búsqueda simple (distingue entre mayúsculas y minúsculas)

El método filter() crea un nuevo array con todos los elementos que pasan la prueba implementada por la función.

const s = [
  { id: 11, name: 'Adam', age: 23, group: 'editor' },
  { id: 47, name: 'GodoFredo', age: 22, group: '' },
  { id: 85, name: 'William', age: 34, group: 'editor' },
  { id: 97, name: 'Oliver', age: 28, group: '' }
];

let res = s.filter(it => it.name.includes('god'));

console.log(res);
// []

3. Una búsqueda simple (no distingue entre mayúsculas y minúsculas)

const s = [
  { id: 11, name: 'Adam', age: 23, group: 'editor' },
  { id: 47, name: 'GodoFredo', age: 22, group: '' },
  { id: 85, name: 'William', age: 34, group: 'editor' },
  { id: 97, name: 'Oliver', age: 28, group: '' }
];

let res = s.filter(it => new RegExp('god', 'i').test(it.name));

console.log(res);
// [ { id: 47, name: 'GodoFredo', age: 22, group: '' } ]

4. Compruebe si alguno de los s tiene derechos de

El método some() comprueba si al menos un elemento del array cumple con la condición implementada por la función proporcionada.

const s = [
  { id: 11, name: 'Adam', age: 23, group: 'editor' },
  { id: 47, name: 'GodoFredo', age: 22, group: '' },
  { id: 85, name: 'William', age: 34, group: 'editor' },
  { id: 97, name: 'Oliver', age: 28, group: '' }
];

const has = s.some( => .group === '');

console.log(has)
// true

5. Concatenar un conjunto de Arrays

El resultado de la primera iteración es igual a : [....[], ....[1, 2, 3]] significa que se transforma en [1, 2, 3] — este valor lo proporcionamos como un 'acc' en la segunda iteración y así sucesivamente.

const animals = [['?', '?'], ['?', '?']];

let flat = animals.reduce((acc, it) => [...acc, ...it]);

console.log(flat);
// ["?", "?", "?", "?"]

Tenga en cuenta que el uso de la sintaxis extendida o sintáxis spread  dentro de un reduce() no es bueno para el rendimiento.

— Aquí hay otro ejemplo más corto sin reduce:

let flat = [].concat.apply([], animals);

— También existe un metodo especifico para realizar la concatenación de forma fácil y practico con Array.flat, estará disponible en JavaScript ES10/ES2019

const animals = [['?', '?'], ['?', '?']];

const flat = animals.flat();

console.log(flat);

// ['?', '?', '?', '?']

6. Crear un objeto que contenga la frecuencia de la clave especificada

Agrupemos y contemos la propiedad 'age' para cada elemento del array:

const s = [
  { id: 11, name: 'Adam', age: 23, group: 'editor' },
  { id: 47, name: 'John', age: 28, group: '' },
  { id: 85, name: 'William', age: 34, group: 'editor' },
  { id: 97, name: 'Oliver', age: 28, group: '' }
];
const groupByAge = s.reduce((acc, it) => {
  acc[it.age] = acc[it.age] + 1 || 1;
  return acc;
}, {});

console.log(groupByAge);
// { '23': 1, '28': 2, '34': 1 }

7. Crear un array de grados Fahrenheit a partir de un array con grados Celsius

const celsius = [-15, -5, 0, 10, 16, 20, 24, 32]
const fahrenheit = celsius.map(t => t * 1.8 + 32);

console.log(fahrenheit);
// [5, 23, 32, 50, 60.8, 68, 75.2, 89.6]

8. Codificar un objeto en una cadena de consulta

const params = {lat: 45, lng: 6, alt: 1000};
const queryString = Object.entries(params).map(p => `${encodeURIComponent(p[0])}=${encodeURIComponent(p[1])}`).('&');

console.log(queryString);
// "lat=45&lng=6&alt=1000"

9. Unión (A ∪ B) de arrays

const arrA = [1, 4, 3, 2];
const arrB = [5, 2, 6, 7, 1];

let union = [...new Set([...arrA, ...arrB])];

console.log(union);
// [1, 4, 3, 2, 5, 6, 7]

10. Intersección (A ∩ B) de arrays

const arrA = [1, 4, 3, 2];
const arrB = [5, 2, 6, 7, 1];

let Intersection  = arrA.filter(it => arrB.includes(it));

console.log(Intersection );
// [1, 2]

¡Eso es todo! — Gracias por leer ❤️

Si tienes alguna pregunta o comentario, házmelo saber en los comentarios de abajo.


Artículo anterior

Nuevas funciones de JavaScript ES10/ES2019

Echemos un vistazo a las nuevas características de ES10/ECMAScript 2019 que fueron aprobadas por TC39

Artículo siguiente

Messenger es la primera aplicación de Facebook en obtener el modo oscuro

Esta esperada funcionalidad está llegando a varios s alrededor del mundo, sin embargo, existe un pequeño truco con el cual se puede activar inmediatamente.

Artículos Relacionados

Como obtener al padre de un elemento con vanilla JS

Como obtener al padre de un elemento con vanilla JS

· 1 min de lectura
Cómo utilizar window.confirm()

Cómo utilizar window.confirm()

· 1 min de lectura
Como elegir una clave SSH para un host especifico

Como elegir una clave SSH para un host especifico

· 1 min de lectura
Como detectar un elemento sticky cuando se queda fijo

Como detectar un elemento sticky cuando se queda fijo

· 1 min de lectura
Convertir una cadena en un array en JavaScript

Convertir una cadena en un array en JavaScript

· 2 min de lectura
Video responsive de YouTube y Vimeo con HTML y CSS

Video responsive de YouTube y Vimeo con HTML y CSS

· 1 min de lectura