Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

234
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!