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

222
Visualizações
¿Cómo ordenar cadenas con espacios en javascript?

Necesito ordenar cadenas. Pero no ordena correctamente cuando encuentra espacios en la cadena. ¿Cómo puedo hacer que no ordene los espacios?

 const array = [ { attributes: { name: 'abcd efg' } }, { attributes: { name: 'Übd cd' } }, { attributes: { name: 'Ku cdf' } }, { attributes: { name: 'äb' } }, { attributes: { name: 'abc' } } ] array.sort((a, b) => { if (a.attributes.name.toUpperCase() .localeCompare(b.attributes.name.toUpperCase(), 'de', { sensitivity: 'base' })) { return -1 } if (b.attributes.name.toUpperCase() .localeCompare(b.attributes.name.toUpperCase(), 'de', { sensitivity: 'base' })) { return 1 } return 0 }) console.log('typeof array', array)

Espero ver:

 [ { attributes: { name: 'abc' } }, { attributes: { name: 'abcd efg' } }, { attributes: { name: 'äb' } }, { attributes: { name: 'Ku cdf' } }, { attributes: { name: 'Übd cd' } } ]
about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

El método String.localeCompare devuelve un número que indica si una cadena de referencia viene antes o después, o es la misma que la cadena dada en el orden de clasificación... que es lo mismo que se supone que devuelve Array.sort :

 const array = [ { attributes: { name: "abcd efg" } }, { attributes: { name: "Übd cd" } }, { attributes: { name: "Ku cdf" } }, { attributes: { name: "ab" } } ]; array.sort((a, b) => a.attributes.name.toUpperCase().localeCompare(b.attributes.name.toUpperCase(), "de", { sensitivity: "base" })); console.log(array);

about 4 years ago · Juan Pablo Isaza Relatório

0

La forma en que funciona localCompare es que si la primera cadena es más pequeña, es decir, viene antes de la segunda cadena, devolverá un número negativo. Y si la primera cadena es mayor, es decir, viene después de la segunda cadena, devolverá un número positivo.

Esta línea:

 if (a.attributes.name.toUpperCase() .localeCompare(b.attributes.name.toUpperCase(), 'de', { sensitivity: 'base' })) { return -1 }

será verdadero incluso si la primera cadena es mayor o la segunda cadena lo es.

El problema es que if (-1) o if(any_negative_value) se considera true . Incluso si localeCompare() devuelve un valor negativo, su primera declaración if siempre se ejecutará. La segunda instrucción if nunca se ejecutará. Por lo tanto, no importa si a.attributes.name es mayor lexicográficamente o b.attributes.name es mayor, siempre se ejecutará la primera instrucción if .

No necesita las declaraciones if . La función de sort solo necesita el número devuelto por localCompare() .

Por lo tanto, simplemente puede devolver el valor de localeCompare() y ordenará los atributos correctamente.

 const array = [ { attributes: { name: 'abcd efg' } }, { attributes: { name: 'Übd cd' } }, { attributes: { name: 'Ku cdf' } }, { attributes: { name: 'ab' } } ] array.sort( (a, b) => a .attributes .name .toUpperCase() .localeCompare(b .attributes .name .toUpperCase(), 'de', { sensitivity: 'base' } ) ); console.log('typeof array', array)

about 4 years ago · Juan Pablo Isaza Relatório

0

Prueba este....

 var hasLeading = s => /^\S+\s\S+\s\S+$/.test(s); var array = [ { attributes: { name: 'abcd efg' } }, { attributes: { name: 'Übd cd' } }, { attributes: { name: 'Ku cdf' } }, { attributes: { name: 'ab' } } ]; array.sort((a, b) => hasLeading(b.attributes.name.toUpperCase()) - hasLeading(a.attributes.name.toUpperCase()) || a.attributes.name.toUpperCase() > b.attributes.name.toUpperCase() || -(a.attributes.name.toUpperCase() < b.attributes.name.toUpperCase()) ); console.log(array);

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