Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

235
Vistas
¿Cómo clasificar los datos del objeto de acuerdo con los criterios dados en otro objeto, cuando los dos objetos tienen las mismas claves?

Tengo dos objetos que necesito combinar de alguna manera para lograr el resultado deseado. Aquí hay un ejemplo de juguete.

Digamos que estoy realizando un experimento sobre una nueva dieta para ratones. Reuní 6 ratones y los alimenté con una dieta diferente. Después de varias semanas, pesé todos los ratones y registré el peso de cada uno. Esos pesos se dan en el siguiente objeto:

 const postExperimentWeights = { mickey: 20, minnie: 11, jerry: 15, stuart: 33, gonzales: 17, pinky: 50, };

Para concluir si alguna de las dietas tuvo éxito, tengo otro objeto de datos, con los pesos objetivo que se considerarían malos , mediocres o buenos , por ratón.

 const targetWeights = { mickey: { belowIsBad: 15, aboveIsGood: 22, }, minnie: { belowIsBad: 5, aboveIsGood: 10, }, jerry: { belowIsBad: 16, aboveIsGood: 20, }, stuart: { belowIsBad: 30, aboveIsGood: 40, }, gonzales: { belowIsBad: 10, aboveIsGood: 15, }, pinky: { belowIsBad: 60, aboveIsGood: 100, }, };

Y mi resultado deseado son 3 variables, cada una de las cuales contiene una matriz de nombres:

 const good = ['minnie', 'gonzales']; // those were above their respective `aboveIsGood` const mediocre = ['mickey', 'stuart']; // were between respective `belowIsBad` & `aboveIsGood` const bad = ['jerry', 'pinky']; // below respective `belowIsBad`

¿Existe una manera bastante simple o elegante de lograr el resultado deseado? Por lo general, prefiero utilizar un enfoque funcional, pero independientemente estaría agradecido por cualquier ayuda.

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Repetiría los resultados de caducidad usando Object.entries() y simplemente los compararía con los valores objetivo:

 const postExperimentWeights = { mickey: 20, minnie: 11, jerry: 15, stuart: 33, gonzales: 17, pinky: 50, }; const targetWeights = { mickey: { belowIsBad: 15, aboveIsGood: 22, }, minnie: { belowIsBad: 5, aboveIsGood: 10, }, jerry: { belowIsBad: 16, aboveIsGood: 20, }, stuart: { belowIsBad: 30, aboveIsGood: 40, }, gonzales: { belowIsBad: 10, aboveIsGood: 15, }, pinky: { belowIsBad: 60, aboveIsGood: 100, }, }; function evaluateResults(input, target) { const good = []; const avg = []; const bad = []; for(const [key,value] of Object.entries(input)) { if(value < target[key].belowIsBad) { bad.push(key); }else if(value > target[key].aboveIsGood) { good.push(key); }else { avg.push(key); } } console.log("good:", good); console.log("avg:", avg); console.log("bad:", bad); } evaluateResults(postExperimentWeights,targetWeights);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Otra solución usando reduce usando push en lugar de concat

 const postExperimentWeights = {mickey: 20,minnie: 11,jerry: 15,stuart: 33,gonzales: 17,pinky: 50,}; const targetWeights = { mickey: {belowIsBad: 15,aboveIsGood: 22,},minnie: {belowIsBad: 5,aboveIsGood: 10,},jerry: {belowIsBad: 16,aboveIsGood: 20,},stuart: {belowIsBad: 30,aboveIsGood: 40,},gonzales: {belowIsBad: 10,aboveIsGood: 15,},pinky: {belowIsBad: 60,aboveIsGood: 100,},}; let res = Object.entries(postExperimentWeights).reduce((acc, [mouse,weight]) => { if (weight > targetWeights[mouse].aboveIsGood) acc.good.push(mouse) else if (targetWeights[mouse].belowIsBad < weight && weight <targetWeights[mouse].aboveIsGood) acc.mediocre.push(mouse) else if (targetWeights[mouse].belowIsBad > weight) acc.bad.push(mouse) return acc }, {good: [],mediocre: [],bad: []}) console.log(res)

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede usar este fragmento de código en el término más simple

 const mices = { mickey: 20, minnie: 11, jerry: 15, stuart: 33, gonzales: 17, pinky: 50 }; const targetWeights = { mickey: { belowIsBad: 15, aboveIsGood: 22 }, minnie: { belowIsBad: 5, aboveIsGood: 10 }, jerry: { belowIsBad: 16, aboveIsGood: 20 }, stuart: { belowIsBad: 30, aboveIsGood: 40 }, gonzales: { belowIsBad: 10, aboveIsGood: 15 }, pinky: { belowIsBad: 60, aboveIsGood: 100 } }; function findTheWeights(main, target) { const good = []; const mediocre = []; const bad = []; for (let mice in main) { const { belowIsBad, aboveIsGood } = target[mice]; main[mice] > aboveIsGood ? good.push(mice) : main[mice] < belowIsBad ? bad.push(mice) : mediocre.push(mice); } return { good, bad, mediocre }; } console.log(findTheWeights(mices, targetWeights));
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda