Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

105
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda