"El diseño es el embajador silencioso de tu marca"
- Paul Brand

Colecciones en Lodash

Antes de ver las como podemos manejar las colecciones en Lodash hay que aclarar dos cosas, la primera es que es una colección y que es Lodash.

Cuando hablamos de colecciones en javascript nos referimos a un conjunto de datos estructurado y ordenado por un índice, esta definición puede incluir a los arrays y a los objetos, de manera que son estos tipos de datos sobre los que vamos a hablar cuando usamos las funciones de lodash para manipularlos.

Respecto a que es Lodash, lo mejor es que te leas este post, o que consultes la página oficial.

Veamos unas cuantas funciones para trabajar con colecciones en Lodash

_.countBy

Este método se usa así _.countBy(collection, [iteratee=_.identity]) según la documentación oficial.
Como es el primero que vemos vamos a explicar que quieren decir esos atributos, el primero ‘collection’ no necesita muchas explicación, es una colección y arriba acabamos de decir que se trata de arrays y objetos.

Pero el segundo ya es más lioso ‘[iteratee=_.identity]’, cuando miramos la estructura y vemos la barra baja ya nos indica que algo tiene que ver con Lodash, y así es, identity es un metodo que proporciona lodash en la sección utils.
Se trata de una función que vamos a ejecutar sobre cada uno de los elementos de la colección, si se trata del nombre de una propiedad esta retorna el valor de la propiedad del elemento sobre el que está iterando.
Y es sobre el resultado de esa función que el countBy trabaja.

_.countBy devuelve un objeto donde estan ordenados de menor a mayor los datos indicando el numero de ocurrencias para cada uno de ellos.

Veamos los ejemplos oficiales:

En el primero ejecutamos como función Math.floor de manera que eliminamos los decimales y nuestra colección que en este caso es un array quedaría como [6,4,6] por eso el objeto que devuelve indica que tenemos un «4» y dos «6».

En el segundo ejemplo se ha usado esa característica de pasar el nombre de la propiedad, como le hemos puesto ‘length’, y tenemos un array de Strings, ha procesado un array con el numero de caracteres que tiene cada String que sería [3,3,5] por eso el objeto que devuelve indica que tenemos dos «3» y un «5».

_.every

Se escribe de esta manera _.every(collection, [predicate=_.identity]), es un método que evalua el que el segundo parámetro se cumpla en todas las iteraciones de la colección.
Devuelve un booleano en función de si es correcto o no.

En el primer caso devuelve false porque estamos preguntando si todos los elementos de la colección son booleanos, y solo el primero lo es.
Para los demas ejemplos la coleccion será un array de objetos que nombran como ‘users’.
En el segundo caso pregunta si todos los elementos que en este caso son objetos tienen ‘barney’ en la propiedad user y la propiedad active es false, como el primer caso no se cumple siempre ya que el segundo objeto tiene ‘fred’ en la propiedad user devuelve false.
El tercer caso seria solo preguntar si la propiedad active es false en todos los casos, y como se cumple devuelve true.
El último devuelve la propiedad active de los objetos y es false.

_.filter

Se escribe _.filter(collection, [predicate=_.identity])
Es una función de filtrado de datos, se parece a _.every en que tambien le pasamos un predicado, y estos pueden ser del mismo tipo que los vistos en ejemplo anterior, pero a diferencia de ella es que tras evaluarlo lo que obtenemos es un array flitrado de los elementos que lo cumplen.

En el primer caso el predicado es una función que nosotros declaramos, en ella le pasamos el objeto sobre el que estamos iterando como parámetro y retornamos los que tengan la propiedad active como ‘false’.
En el segundo pasamos varias propiedades para filtrar, y en el tercero solo una.
Por ultimo pasamos la propiedad active y esto devuelve los objetos que devuelvan true en ella.

_.find

_.find(collection, [predicate=_.identity], [fromIndex=0])
También es una función de filtrado, y para resumirlo es exactamente igual que _.filter con la salvedad de que solo devuelve la primera ocurrencia que encuentre.
Vemos que hay un tercer parámetro que se llama fromIndex que no teniamos en el ejemplo anterior, ya que _.find solo devuelve el primer elemento que encuentra con este parametro le indicamos a partir de que iteración tenemos que empezar a buscar, siendo 0 el primer elemento.

Los ejemplos son estos

_.findLast

_.findLast(collection, [predicate=_.identity], [fromIndex=collection.length-1])
Es igual que el método find solo que empieza a buscar desde atrás, de hecho por esa razón su fromIndex en vez de ser 0 por defecto es el numero de elementos del array – 1.

En este ejemplo declaramos una función que devuelve aquellos elementos que divididos entre 2 tengan de resto 1, empieza a buscar desde el final y el primer caso que encuentra es el ‘3’ (si en vez de _.findLast hubieramos usado _.find devolvería ‘1’).

The following two tabs change content below.
Especialista en diseño web responsive, programador html5, css3, jquery, php y java.

Latest posts by Óscar Lijó (see all)