This graph shows how many times the word ______ has been mentioned throughout the history of the program.
Hacer ejercicios de algoritmia, ya sea de transformar datos, buscar, ordenar datos,
es muy útil para mejorar la agilidad a la hora de enfrentarse con problemas.
Así que vamos a echarle una mano a un chico en nuestra comunidad de Discord,
que te dejo en la descripción, en un enlace para que te apuntes, que somos más de 5.000.
Vamos a ayudarle y así vamos a ver cómo yo solucionaría este problema.
Y te invito a que dejes tu solución en los comentarios también,
porque como todo, como siempre, hay un montón de formas de hacerlo.
Vamos a ver el problema.
Aquí tenemos que dice, dados estos datos, me los voy a ir copiando ya, el paddock type,
toda la información de los paddocks, voy a formatear bien esto,
esto lo vamos a hacer aquí más chiquitito.
Teniendo estos datos, dice, ¿cómo harían para devolver un arreglo con los nombres de cada paddock type?
Aquí tenemos el nombre en el paddock type, estos serían los nombres,
pero los nombres dicen que tienen que estar ordenados decrecientemente por la suma total
de la cantidad de hectáreas plantadas de cada uno de ellos, que se encuentra en el arreglo paddocks,
que es este arreglo de aquí.
Aquí vemos que tenemos área, área, área, y cada uno de estos objetos es de un paddock type.
Así que tenemos que sumar todos ellos y además agruparlos por el paddock type,
y luego ordenarlos decrecientemente y mostrar en una lista sus nombres.
Vamos a ver cómo yo lo haría así rápidamente.
No voy a tocar los objetos originales, no voy a tocar este, tampoco voy a tocar este,
que era un array con objetos, yo no los voy a tocar.
Vamos a dejar que esto se quede tal y como está, porque creo que así vamos a solucionar el problema,
pero si se pudiese tocar lo haría de otra forma.
Para empezar yo crearía un area of paddocks, que sería un objeto.
En este objeto lo que podemos hacer es recorrer los paddocks para hacer la suma.
Se podría hacer con un reduce, aunque yo no soy muy fan de los reduce,
a mí me gusta más utilizar el for each normalmente, porque creo que se lee bastante mejor.
Así que lo primero que yo haría sería recuperar de cada paddock,
aquí en este objeto tenemos tanto el paddock type ID como el area.
Pues vamos a recuperar estas dos propiedades.
Así que ponemos el, aquí he copiado además, ponemos el paddock type ID y el area.
De cada paddock vamos a recuperar esto.
Ahora lo que vamos a hacer es, en este objeto vamos a ver si tenemos este paddock type ID.
Aquí esto lo puedes hacer de un montón de formas diferentes.
Por ejemplo, lo que puedes hacer es, primero, inicializarlo en el caso de que sea necesario.
Una cosa así.
Si tenemos el area of paddocks, paddock type ID,
o utilizando el Nullish Call Ascending Operator, puedes inicializarlo con cero.
Esta puede ser una forma, si no podríamos utilizar la forma más corta que acaba de aparecer también,
que es el Logical Ascending Operators.
Así que podemos utilizarlo de esta forma.
Queda un poquito más corto.
Otra cosa sería inicializarlo desde el principio.
Pero bueno, aquí cada uno como lo quiera hacer.
En este caso lo que va a hacer es que, si este de aquí es undefined o es null,
en este caso sería undefined la primera vez que entra, le vamos a poner el valor cero.
De esta forma, después vamos a estar aquí sumando de forma mucho más correcta y sin ningún tipo de problema.
Así le sumamos el área.
Hasta aquí, en el area of paddocks, lo que deberíamos tener, si lo ponemos por aquí,
aquí se puede ver, que lo que tenemos aquí es un objeto donde en la posición 1 tenemos el paddock type ID 1,
que tiene una suma total de 56.259.
Bueno, ya tendríamos como la suma, pero ahora tendríamos que hacer algún tipo de mapeo, un mapper.
Lo que vamos a hacer es que el paddock type también se podría hacer de diferentes formas,
pero yo creo que así separamos porque incluso se podría hacer una función que sea calcular el área de los paddocks
y por otro lado hacer este mapeo.
Así que yo lo voy a hacer separado.
Vamos a mapear el paddock type, que es este objeto que teníamos aquí,
de forma que le vamos a añadir la información de la suma total de cada uno de los paddocks,
del ID 1, del ID 2, del ID 3 y todo eso.
Así que, ¿cómo haría esto?
Yo aquí en el map lo que haría es mantener toda la información que tenemos antes aquí.
Para no mutarla estamos haciendo el map y lo que estoy haciendo aquí es utilizar el spread operator.
Así que ahora tendríamos el ID 1 name paltos.
Y lo que voy a hacer es añadirle cuál es el total sum de cada uno.
El total sum que está en área of paddocks y esto accediendo al p.id.
p.id, que el p es el paddock que tenemos aquí, este objeto sería este ID.
Accediendo a esa posición tendríamos la suma completa.
Con esto ya tendríamos, bueno, lo podríamos ver, de hecho tenemos aquí el objeto ID 1 name paltos
y ya le hemos puesto la suma correcta a cada uno de los paddock types.
Ahora bien, vamos a tener que ordenarlos.
Muy sencillo, muy fácil el ordenarlo.
Hay dos formas de ordenar, ¿no?
Ascendente y descendiente.
Con números es muy sencillo.
Utilizando el sort vamos a tener que comparar A y B.
Si queremos que sea ascendente tendríamos que poner el A total sum menos B total sum.
Pero ya nos ha dicho, ¿ves?
Aquí ya lo tendríamos de forma ascendente ordenado.
Tendríamos el total sum más pequeño arriba,
pero nos ha dicho que tiene que ser descendiente.
Así que hay que hacerlo al revés.
Hay que restarle el B total sum al A punto total sum.
Si quieres recordar cómo se hace que sea ascendente o descendente,
lo mejor es acordarte que la A, que es el primero,
si está al principio y le restas el siguiente,
significa que va a ser ascendente.
¿Vale?
Es muy tonto el truco, pero al menos a mí me funciona.
Para acordarme cuál es ascendente y descendente.
En este caso, si es B menos A,
en este caso B total sum menos A total sum,
sería descendente.
Esto se parece bastante a lo que necesitamos,
pero no se ha dicho que quiere un arreglo con los nombres.
Así que vamos a mapear y por cada uno lo que vamos a hacer es devolver simplemente el nombre.
Y con esto ya tendríamos aquí la solución.
Avellanos, paltos y cerezas con nogales.
Pues estos serían los nombres de los paddocks,
que están ordenados de forma descendiente por los que tienen menos área.
Para asegurarnos, vamos a revisarlo aquí.
Pero vemos que el avellanos es el que más tiene y de forma descendiente va bajando.
Pues ya mapeamos y lo dejamos así.
Y con esto ya tendríamos esta solución.
Ahora bien, te invito a que dejes tu solución también en los comentarios,
porque se puede hacer de un montón de formas,
con Reducer, con otras funciones, de forma funcional.
A ver, a ver cómo nos sorprendes.
Y si te ha gustado el vídeo, pues no hace falta que le des like,
pero sí te invito a que te pases por mi Discord,
porque somos un montón y de vez en cuando nos vamos ayudando
para problemas, dudas y un montón de cosas.
Así que nada, nos vemos en el siguiente vídeo.
¡Chao!
Y si te ha gustado...