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

192
Vistas
Basado en Array#reduce, ¿cómo se identifica el elemento de la matriz que coincide mejor con algunas restricciones específicas?

Básicamente, lo que estoy tratando de hacer es mapear esta matriz e identificar qué objetos satisfacen una determinada condición. La condición es: Obtenga un objeto que tenga el valor más alto de a+b y si tiene dos objetos con el mismo valor de a+b, obtenga el que tenga el valor más alto de c. ¿Cuál es la mejor manera de hacer esto? ¿Quizás reducir?

 const data = [ { id: 1, a: 12, b: 75, c: 11, }, { id: 2, a: 65, b: 14, c: 32, }, { id: 3, a: 32, b: 23, c: 45, }, { id: 4, a: 22, b: 1, c: 3, }, ];
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Un bucle for simple debería funcionar. Recorra la matriz y si a + b del objeto actual es mayor que un objeto almacenado, sobrescriba el objeto almacenado con el objeto de bucle actual, verificando c si es necesario.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Ya es un primer enfoque ingenuo basado en la reduce que implementa los requisitos y restricciones del OP casi literalmente hace exactamente lo que pide el OP.

En caso de que uno no proporcione un valor inicial al reductor, esta función de devolución de llamada reductora pasa los dos primeros elementos de la matriz en su primera invocación. Se supone que la función devuelve un valor que, con cualquier siguiente paso de iteración, se pasará como el primer argumento de la misma función junto con el elemento de matriz procesado actualmente (que es el segundo argumento).

Por lo tanto, para el caso de uso del OP, solo se necesita implementar la comparación correcta que siempre garantiza el valor de retorno esperado ...

 function getItemWithHighestTotal(result, item) { const resultTotal = result.a + result.b; const itemTotal = item.a + item.b; return ( ((resultTotal > itemTotal) && result) || ((resultTotal < itemTotal) && item) || ((result.c < item.c) && item) || // OP did not define the clause where // even both `c` values are equal. result ); } console.log( [{ id: 1, a: 12, b: 75, c: 11, }, { id: 2, a: 65, b: 14, c: 32, }, { id: 3, a: 32, b: 23, c: 45, }, { id: 4, a: 22, b: 1, c: 3, }].reduce(getItemWithHighestTotal) ); console.log( [{ id: 1, a: 12, b: 75, c: 11, }, { id: 2, a: 65, b: 14, c: 32, }, { id: 3, a: 32, b: 23, c: 45, }, { id: 4, a: 22, b: 1, c: 3, }, { id: 5, a: 75, b: 12, c: 12, }].reduce(getItemWithHighestTotal) );
 .as-console-wrapper { min-height: 100%!important; top: 0; }

about 4 years ago · Juan Pablo Isaza Denunciar

0

Un bucle for simple sería genial

 const data = [ { id: 1, a: 12, b: 75, c: 11, }, { id: 2, a: 65, b: 14, c: 32, }, { id: 3, a: 32, b: 23, c: 45, }, { id: 4, a: 22, b: 1, c: 3, }, ]; let index, cHigh = Number.MIN_SAFE_INTEGER, total = Number.MIN_SAFE_INTEGER; for (let i = 0; i < data.length; ++i) { const { a, b, c } = data[i]; if (a + b > total) { total = a + b; index = i; } else if (a + b === total) { if (c > cHigh) { cHigh = c; index = i; } } } console.log(index); console.log(data[index]);

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