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

200
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 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