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

104
Vistas
Compare objetos dentro de una matriz y cree una nueva matriz sin duplicados

Tengo una serie de objetos:

 [ { name: "John", age: "34" }, { name: "Ace", age: "14" }, { name: "John", age: "45" }, { name: "Harry", age: "11" }, ]

Quiero comparar los objetos dentro de una matriz por nombre. Si existe el nombre duplicado, debo comparar la edad y solo mantener el objeto de mayor edad.

El resultado esperado debe ser:

 [ { name: "Ace", age: "14" }, { name: "John", age: "45" }, { name: "Harry", age: "11" }, ]

Soy nuevo en javascript/typescript y no pude encontrar ninguna solución óptima para este problema. Espero haber podido explicar mi problema claramente.

Gracias.

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

0

Tal vez algo así

 const obj = [{ name: "John", age: "34" }, { name: "Ace", age: "14" }, { name: "John", age: "45" }, { name: "Harry", age: "11" }]; const objCopy = JSON.parse(JSON.stringify(obj)) const res = objCopy.reduce((acc, obj) => { const personExist = acc.find(({ name }) => name === obj.name); if (personExist) { if (parseInt(obj.age, 10) > parseInt(personExist.age, 10)) { personExist.age = obj.age; } } else { acc.push(obj); } return acc; }, []); console.log({ res });
 .as-console-wrapper { min-height: 100%!important; top: 0; }

about 4 years ago · Juan Pablo Isaza Denunciar

0

El siguiente enfoque proporcionado usa reduce y crea en un primer paso solo un índice/mapa de elementos de mayor antigüedad, cada uno de los cuales es único por su nombre. Por lo tanto, se podría usar el estado temporal del result creado programáticamente como búsqueda de elementos de name d ya existentes.

En un segundo paso, uno recuperaría la matriz de elementos únicos con nombre de mayor antigüedad pasando dicho índice a Object.values .

 function collectHighestAgeItemOfSameName(result, item) { const { name, age } = item; if ( !(name in result) || Number(result[name].age) < Number(age) ) { result[name] = item; } return result; } const sampleData = [{ name: "John", age: "34" }, { name: "Ace", age: "14" }, { name: "Harry", age: "9" }, { name: "John", age: "45" }, { name: "Harry", age: "11" }, { name: "Ace", age: "13" }]; console.log( 'reduced index of unique person items of highest age ...', sampleData .reduce(collectHighestAgeItemOfSameName, {}) ) console.log( 'array of unique person items of highest age ...', Object .values( sampleData .reduce(collectHighestAgeItemOfSameName, {}) ) )
 .as-console-wrapper { min-height: 100%!important; top: 0; }

about 4 years ago · Juan Pablo Isaza Denunciar

0

prueba esto

 var objArr=...your json object; var maxValueGroup = "name"; var maxValueName = "age"; console.log(JSON.stringify(newArr(objArr,maxValueGroup, maxValueName)));

nuevoArr

 var newArr = function (objArr,maxValueGroup, maxValueName) { var arr = groupBy(objArr, maxValueGroup); var newArr = []; $.each(arr, function (key) { var maxVal = 0; var maxValItem; arr[key].forEach((element) => { if (element[maxValueName] > maxVal) { maxVal = element[maxValueName]; maxValItem = element; } }); newArr.push(maxValItem); }); return newArr; };

agrupar por

 var groupBy = function (xs, key) { return xs.reduce(function (rv, x) { (rv[x[key]] = rv[x[key]] || []).push(x); return rv; }, {}); };
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