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

199
Views
¿Definir parámetros personalizados dentro de las funciones de comparación de javascript en JavaScript?

Tengo una serie de objetos que necesitan ordenarse por apellido, sin embargo, el objeto solo tiene parámetros de nombre y nombre completo, por lo que para el apellido tengo que usar fullname.replace((firstname + " "), "") . Ejemplo de matriz a continuación.

 const names = [ { firstname: "John", fullname: "John Doe" }, { firstname: "Amber", fullname: "Amber Smith" }, { firstname: "Michael", fullname: "Michael Smith" }, { firstname: "Jessica", fullname: "Jessica Kelly Charles" } ]

Si bien puedo usar "reemplazar" cada vez dentro de una función de comparación de clasificación, preferiría tener algo como esto:

 names.sort(function(a, b) { const lastname = fullname.replace((firstname+ " "), ""); if (a.lastname < b.lastname) { return -1; } else if (a.lastname > b.lastname) { return 1; } return 0; });

Obviamente, el apellido aparece como indefinido. Esto ha sido bastante difícil de buscar en Google, y creo que me faltan algunos conceptos básicos de JavaScript aquí, pero agradecería mucho su ayuda para ayudarme a aprender a escribir un mejor código.

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Su mejor opción es modificar la fuente de la matriz para que almacene el lastname en el momento de la recopilación.

Si no puedes hacer eso:

A menos que haga un pase de preparación a través de su matriz agregando una propiedad de lastname , tendrá que calcularla cada vez que se llame a su devolución de llamada de sort , tanto para a como para b .

 names.sort((a, b) => { const alast = a.fullname.replace(a.firstname + " "), ""); const blast = b.fullname.replace(b.firstname + " "), ""); return alast.localeCompare(blast); });

(Tenga en cuenta que usé localeCompare , que siempre es una mejor opción para nombres y otras cadenas de lenguaje natural que < y > . Por ejemplo, pregunte a los franceses si ç realmente debería ir después de z como lo hace con < y > . ;-) )

Sin embargo, eso volverá a calcular el lastname para el mismo objeto repetidamente, ya que el mismo objeto se puede pasar para sort (ya sea como a o b ) repetidamente. Si crees que eso puede ser un problema, podrías hacer el pase de preparación que mencioné:

 // Build a map of entry to last names const lastnames = new Map(names.map(entry => { const lastname = entry.fullname.replace(entry.firstname + " ", ""); return [entry, lastname]; })); // sort names.sort((a, b) => { return lastnames.get(a).localeCompare(lastnames.get(b)); });
about 4 years ago · Juan Pablo Isaza Report

0

Solo está declarando una nueva variable tratando de acceder a ella a través de la propiedad del objeto. Debe mapear sus datos en primer lugar como:

 const names = [ { firstname: "John", fullname: "John Doe" }, { firstname: "Amber", fullname: "Amber Smith" }, { firstname: "Michael", fullname: "Michael Smith" }, { firstname: "Jessica", fullname: "Jessica Kelly Charles" } ].map(person => ({ ...person, lastName: person.fullName.replace(person.firstName + ' ', '') }));

Después de mapear sus datos de esa manera, puede usar .lastName en el lugar que necesite.

 names.sort(function(a, b) { if (a.lastName < b.lastName) { return -1; } else if (a.lastName > b.lastName) { return 1; } return 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!