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

165
Vistas
¿Cómo ordenar cadenas en JavaScript por valores de puntos de código?

Necesito ordenar una matriz de cadenas, donde los elementos se comparan lexicográficamente como secuencias de valores de puntos de código, de modo que, por ejemplo, "Z" < "a" < "\udabc" < "�" < "💩" .

  1. ¿Existe una forma más eficiente de comparar cadenas, además de iterar manualmente sobre ambas y comparar los puntos de código correspondientes?
  2. ¿Qué sucede si se garantiza que las cadenas no tienen ningún punto de código sustituto (pero pueden tener pares sustitutos, por lo que "�" < "💩" aún debería mantenerse)? ¿Existe un procedimiento más eficiente para este caso especial?

Nota: hay muchas respuestas en StackOverflow que explican cómo ordenar cadenas, pero usan el orden localeCompare o el orden definido por los operadores de comparación de JavaScript (que comparan cadenas como secuencias de unidades de código UTF-16). No estoy interesado en ninguno de los dos.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

¿Cómo ordenar cadenas en JavaScript por valores de punto de código?


Parece ser un problema sorprendentemente difícil. Aquí hay una implementación de prueba de concepto (POC):

 'use strict'; function compareCodePoints(s1, s2) { const len = Math.min(s1.length, s2.length); let i = 0; for (const c1 of s1) { if (i >= len) { break; } const cp1 = s1.codePointAt(i); const cp2 = s2.codePointAt(i); const order = cp1 - cp2; if (order !== 0) { return order; } i++; if (cp1 > 0xFFFF) { i++; } } return s1.length - s2.length; }

 let s =[]; let s1 = "abc𞸁z"; let s2 = "abc𞸂z"; s = [s1, s2]; console.log(s); s.sort(compareCodePoints); console.log(s); console.log() s = [s2, s1]; console.log(s); s.sort(compareCodePoints); console.log(s); console.log() s1 = "a"; s2 = ""; console.log([s1, s2]); console.log(compareCodePoints(s1, s2)); console.log([s2, s1]); console.log(compareCodePoints(s2, s1));

 $ node codepoint.poc.js [ 'abc𞸁z', 'abc𞸂z' ] [ 'abc𞸁z', 'abc𞸂z' ] [ 'abc𞸂z', 'abc𞸁z' ] [ 'abc𞸁z', 'abc𞸂z' ] [ 'a', '' ] 1 [ '', 'a' ] -1 $
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