muy bueno bro, ojala no colocaran la informacion tan desorganizada, Platzi debe mejorar muchas cosas jejeje
Esto es lo que logré hasta ahora sobre la proyección salarial. Me basé en las siguientes lecturas:
Cálculo de aumento de salario
Media Geométrica - Usos
constsalaryProjection=persona=>{//Array de los porcentajes de incrementolet incrementPercentage =[];const salarios_ = salarios
.find(item=> item.name=== persona).trabajos.map(item=> item.salario);//Sacando el procentaje de incremento de salariosconst increment = salarios_.forEach((item, index, arr)=>{if(index ===(arr.length-1)){return;}//No lo he multiplicado por 100 porque después tendré que dividirlo por 10 de nuevo.let increment =((arr[index +1]- arr[index])/ arr[index]); incrementPercentage.push(increment +1);});//Aplicando la media geometrica de los incrementos a 2 decimales.const mg =PlatziMath.mediaGeo(incrementPercentage).toFixed(2);//Obteniendo el porcentaje. Es decir: 1.45 => 45% fue el incremento.const percent =(mg -1).toFixed(2);//Calculamos su proyeccion salarial con el porcentaje obtenido.const projSalarial =Math.trunc(salarios_[salarios_.length-1]*(1+(percent)));return projSalarial;}console.log(salaryProjection('Juanita'));//Expected output => 12975
Hola, Josué.
Estaba revisando tu código y me di cuenta de que tu variable
const percent =(mg -1).toFixed(2);
Es de tipo string, por eso tu proyección salarial te sale por 12,975.00, siendo lo correcto 1,725.00 que equivale a un 38% de aumento.
Hola a todos.
Realice de la forma siguiente una función para obtener la proyección salarial para el próximo año.
Resultado:
proyeccionSalarial('Juanita');El procentaje de incremento es:0.38Tu nuevo salario seria de:1725
Les recomiendo usar
console.table(// code)
para que se vean mejor impresos los objetos xd
es mi idea o al profe le gusta mucho DC? 🤔
SOY BATMAN
xD no, I'm Batman
Para calcular la proyección, se me ocurrió calcularlo con una media geometrica, tal vez no sea lo mas optimo para una proyeccion, pero me gusto el reto porque tuve que aplicar una raíz con un indice de 4 y aplicar varios condicionales para cumplir las reglas de esta media en especifico, tambien use reduce, para multiplicar todos los elementos de un array.
Media Geometría :
> La media geométrica se calcula como un producto conjunto. Es decir, que todos los valores se multiplican entre sí. De modo que si uno de ellos fuera cero, el producto total sería cero. Por ello, debemos siempre tener en cuenta que a la hora de calcular la media geométrica necesitamos números que sean únicamente positivos
Ahora todo eso en js
// Haremos la proyeccion salarial usando una media geometrica// Necesitamos el porcentaje de aumento de cada año, para calcular la media geometrica// %aumento = (salarioNuevo - salarioViejo) / salarioViejo + 1const aumentos =[];functioncalcularMediaGeometrica(person){const array =listaSalarios(person);for(i=1; i<array.length; i++){let aumentoPorAnnio =(array[i]- array[i-1])/ array[i-1];// condicional para cumplir reglas de la Media Geometrica (Si hay un aumento de 0% no sumarle el +1)if(aumentoPorAnnio ===0){ aumentoPorAnnio =0;}else{ aumentoPorAnnio++;} aumentos.push(aumentoPorAnnio.toFixed(2));}console.log(aumentos);let multiplicarAumentos = aumentos.reduce((valorAcumulado, valorNuevo)=> valorAcumulado * valorNuevo);let indiceRaiz =1/ aumentos.length;let mediaGeometrica = multiplicarAumentos ** indiceRaiz;let proyeccion = mediaGeometrica * array[array.length-1];console.log(mediaGeometrica.toFixed(2));if(mediaGeometrica ===0){console.log(`${person} para el año que viene proyectamos que no tendras un aumento salarial.`);}else{console.log(`${person} para el año que viene proyectamos que tendras un salario de $${proyeccion.toFixed(0)}.`);}return mediaGeometrica.toFixed(2);}calcularMediaGeometrica("Daniel");
Yo decidí sacar la diferencia entre el salario más grande menos el salario anterior al mismo, para evitar los salarios repetidos utilicé el objeto Set. Referencia
constproyectionSalaryPerPerson=(personName)=>{const arr =findPersonByName(personName).works.map((el)=> el.salary);// El objeto Set solo almacena valores únicos const uniqueSalaries =[...newSet(arr)];const arrLength = uniqueSalaries.length;/*
Para calcular la proyección, primero se evalúa con un ternario si existe más de un elemento en el arreglo, si sí, se resta tanto el último como el penúltimo elemento, si no, simplemente se calcula el 10% del único elemento y se suma con el mismo.
*/const proyection = arrLength >1? uniqueSalaries[arrLength -1]- uniqueSalaries[arrLength -2]: uniqueSalaries *0.1;return uniqueSalaries[arrLength -1]+ proyection;};
Análisis del array SALARIOS
Este es mi aporte
functionfindPerson(findPerson){return salarios.find((person)=>person.name==findPerson);}functionincrementSalary(salary){const incrementSlary=salary.sort((a,b)=>a-b);let salaryMax= incrementSlary[incrementSlary.length-1];let salaryMin=incrementSlary[0];const percentageIncrement=(salaryMax-salaryMin)/(salaryMin*100);const averageSalary=Statistics.median(salary);const perspectiveSalary=averageSalary+(averageSalary*percentageIncrement)console.log('El incremento del salario es del', percentageIncrement*100,'% y el salario para el próximo año sería de ',perspectiveSalary);}functionsalaryPerson(person){const works=findPerson(person).trabajos;const salary= works.map((item)=>item.salario);Statistics.median(salary);Statistics.mode(salary);incrementSalary(salary);}
Mi humilde solucion :)
Cree un nuevo array y la recorri con un for, por cada elemento en en salario, lo agarraba y lo mete en mi nuevo array que declare
functionmedianaPorPersona(nombrePersona){const trabajos =encontrarPersona(nombrePersona).trabajoslet salarioArr =[]for(let i =0; i < trabajos.length; i++){ salarioArr.push(trabajos[i].salario)}console.log(trabajos)console.log(salarioArr)console.log(PlatziMath.calcularMediana(salarioArr))}
Al invocar un método de un objeto desde otro método, ¿Estaría bien hacerlo con this.nombreMetodo()?
Claro!!
Es correcto, siempre que te encuentres dentro de una clase, deberás hacer referencia a otros métodos o propiedades con this.
antes de entrar a esta clase me puse a jugar con el código y me di cuenta del undefind por la funciones en platziMath. casi me arranco los pelos pero pude resolver el error que ahora explicas.
Les comparto la lista de salarios pero con IDs incorporados. :D
🚩 Paso a paso para calcular la mediana de los salarios de cualquier empleado registrado
Paso1️⃣
Paso2️⃣
Paso 3️⃣
Paso 4️⃣
Paso 5️⃣
Bonus 💰💰
como llevan sus practicas , como es que practica de que forma para aprender mas ya que esta clase se me hizo dificil no me salia pero buscando informacion adicional mi error era que no habia echo en return en una linea de codigo,
me gustaria saber como es que llevan sus practicas de que forma estudian y practican acaso ven las clases muchas veces
Yo veo las clases 3 veces
La primera solo veo
La segunda voy haciendo paso a paso lo mismo que el profe
Y la tercera vez realmente no veo la clase, sino que trato de replicar el mismo código (o incluso alguna funcionalidad extra) rompiendo todo para ver si realmente entendí lo que trataba de enseñar la clase
Que tal en una pagina :D
Para calcular la proyeccion de un nuevo salario se me ocurrio sacar un promedio de las diferencias entre los salarios de año tras año, se que no es un calculo que se pueda aplicar en la vida real, simplemente se me ocurrio asi de golpe y me puse a escribir codigo saljksjksasd