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

184
Views
Combinación eficiente de transformaciones de métodos de matrices múltiples en Javascript

Tengo un programa de trabajo que cumple con las condiciones a continuación, pero me pregunto si existe una solución más eficiente. Actualmente, aplico 4 transformaciones de métodos de matriz de Javascript diferentes, lo que da como resultado la devolución de una nueva matriz para cada transformación para un total de 4 nuevas matrices. ¿Se pueden combinar estas transformaciones para crear solo 1 matriz adicional en lugar de 4 nuevas matrices? Podría encadenar las llamadas, pero estaba pensando que podría ser posible combinarlas todas en el método reduce(), pero no estoy seguro de cómo se vería o si hay alguna solución mejor.

Los criterios que deben cumplirse:

  1. Solo incluya empleados de la organización de Google, pero permita que esto se pase como un parámetro de entrada
  2. Los apellidos deben ser únicos (sin apellidos duplicados)
  3. Los empleados deben ordenarse por ID (ascendente)
  4. Cada empleado debe tener una propiedad añadida llamada fullName que es una combinación de nombre y apellido, separados por un espacio
 const GOOGLE_ORG = 'Google'; const employees = [ { id: 3, firstName: 'John', lastName: 'Doe', organization: 'Google', }, { id: 7, firstName: 'Jake', lastName: 'Smith', organization: 'Google', }, { id: 1, firstName: 'Jane', lastName: 'Doe', organization: 'Google', }, { id: 2, firstName: 'Vanessa', lastName: 'Smith', organization: 'Meta', }, { id: 5, firstName: 'Sarah', lastName: 'Hernandez', organization: 'Meta', }, { id: 8, firstName: 'Jessica', lastName: 'Morales', organization: 'Google', }, { id: 4, firstName: 'Paul', lastName: 'Stark', organization: 'Google', }, { id: 6, firstName: 'Peter', lastName: 'Brown', organization: 'Meta', }, ]; const transformArray = (org) => { const filteredByOrg = employees.filter((employee) => employee.organization === org); const addedFullName = filteredByOrg.map((employee) => ({ ...employee, fullName: employee.firstName + ' ' + employee.lastName, })); const uniqueByLastName = [...addedFullName.reduce((map, obj) => map.set(obj.lastName, obj), new Map()).values()]; return uniqueByLastName.sort((a, b) => a.id - b.id); }; transformArray(GOOGLE_ORG);
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Sí, puede usar Array.prototype.reduce para minimizar la creación de matrices y la cantidad de iteraciones.

 const GOOGLE_ORG = 'Google'; const employees = [ { id: 3, firstName: 'John', lastName: 'Doe', organization: 'Google', }, { id: 7, firstName: 'Jake', lastName: 'Smith', organization: 'Google', }, { id: 1, firstName: 'Jane', lastName: 'Doe', organization: 'Google', }, { id: 2, firstName: 'Vanessa', lastName: 'Smith', organization: 'Meta', }, { id: 5, firstName: 'Sarah', lastName: 'Hernandez', organization: 'Meta', }, { id: 8, firstName: 'Jessica', lastName: 'Morales', organization: 'Google', }, { id: 4, firstName: 'Paul', lastName: 'Stark', organization: 'Google', }, { id: 6, firstName: 'Peter', lastName: 'Brown', organization: 'Meta', }, ]; const transformArray = (org) => { return (employees.reduce((lastNames => ((acc, curr) => { if(!lastNames.has(curr.lastName) && curr.organization === org) { lastNames.add(curr.lastName) acc.push({...curr, fullName: `${curr.firstName} ${curr.lastName}`}) } return acc; }))(new Set()), []).sort((a, b) => a.id - b.id)); }; console.log(transformArray(GOOGLE_ORG));

about 4 years ago · Juan Pablo Isaza Report

0

Podrías encadenar todas las operaciones.

En realidad, devuelve un resultado diferente al filtrar apellidos únicos y ordenar después o al ordenar primero y luego filtrar.

Un ejemplo de cierre :

Tome esta línea para filtrar con un Set :

 .filter((s => ({ lastName }) => !s.has(lastName) && s.add(lastName))(new Set))

Un cierre toma las variables en el ámbito de la función de llamada y devuelve otra función. Esta función tiene acceso a la variable. Echemos un vistazo con un formato diferente:

 .filter( (s => ({ lastName }) => !s.has(lastName) && s.add(lastName)) (new Set) )

Aquí, la función se llama con el new Set y esta función se devuelve

 ({ lastName }) => !s.has(lastName) && s.add(lastName)

como devolución de llamada para el método de filtro.

 const GOOGLE_ORG = 'Google', employees = [{ id: 3, firstName: 'John', lastName: 'Doe', organization: 'Google' }, { id: 7, firstName: 'Jake', lastName: 'Smith', organization: 'Google' }, { id: 1, firstName: 'Jane', lastName: 'Doe', organization: 'Google' }, { id: 2, firstName: 'Vanessa', lastName: 'Smith', organization: 'Meta' }, { id: 5, firstName: 'Sarah', lastName: 'Hernandez', organization: 'Meta' }, { id: 8, firstName: 'Jessica', lastName: 'Morales', organization: 'Google' }, { id: 4, firstName: 'Paul', lastName: 'Stark', organization: 'Google' }, { id: 6, firstName: 'Peter', lastName: 'Brown', organization: 'Meta' }], result = employees .filter(({ organization }) => organization === GOOGLE_ORG) .filter((s => ({ lastName }) => !s.has(lastName) && s.add(lastName))(new Set)) .sort((a, b) => a.id - b.id) .map(o => ({ ...o, fullName: o.firstName + o.lastName })); console.log(result);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

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!