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

108
Views
Cómo escribir usando mecanografiado una función capaz de agregar o reemplazar un elemento de una matriz de Objetos

Quiero crear una función que tome como entrada una matriz de Objetos, un Objeto y una clave y devuelva una Matriz de Objetos que contenga el nuevo Objeto en la posición 0 si es un Objeto nuevo o en la misma posición si no es un nuevo una. La clave se usa para comparar los Objetos y puede ser solo una cadena o un número.

Escribí este pero es obligatorio tener una propiedad de identificación dentro de los Objetos.

 export function addOrReplaceById<T extends Array<{ id: string }>>( arrayOfObjects: T, newObject: { id: string } ): T { const index = arrayOfObjects.findIndex((object) => object.id === newObject.id); if (index === -1) { arrayOfObjects.unshift(newObject); } else { arrayOfObjects[index] = newObject; } return arrayOfObjects; }
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Considere este ejemplo:

 export function addOrReplaceById< Obj extends { id: string }, Arr extends Array<Obj> >( arrayOfObjects: [...Arr], newObject: Obj ) { const data = arrayOfObjects .reduce<{ exists: boolean, arr: Obj[] }>( (acc, obj) => obj.id === newObject.id ? { ...acc, exists: true, arr: [...acc.arr, newObject] } : acc, { exists: false, arr: [] }); return data.exists ? data.arr : [newObject, ...data.arr] }

El ejemplo anterior reducirá un poco la complejidad. la operación unshift es costosa. Es por eso que creé una nueva estructura de datos {exists: boolean, arr:Obj[]} .

También he devuelto una nueva matriz en lugar de la mutación de la matriz existente

about 4 years ago · Juan Pablo Isaza Report

0

Puedes escribir tu función así:

 export function addOrReplaceByKey<T extends {[x: string]: any}>( arrayOfObjects: T[], newObject: T, key: keyof T, ): T[] { const index = arrayOfObjects.findIndex((object) => object[key] === newObject[key]); if (index === -1) { arrayOfObjects.unshift(newObject); } else { arrayOfObjects[index] = newObject; } return arrayOfObjects; };
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!