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

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

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

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