Command Palette

Search for a command to run...

Comparación con localeCompare()

Aprende a comparar strings según las reglas de ordenamiento del idioma local para alfabetización correcta, con opciones de sensibilidad, comparación numérica y ordenamiento internacional.

Lectura: 10 min
Nivel: Intermedio

TL;DR - Resumen rápido

  • localeCompare() devuelve -1, 0 o 1 según el orden alfabético local
  • Acepta un locale (idioma) para comparación específica de región
  • Las opciones controlan sensibilidad (case, accent, base)
  • La opción numeric permite comparación numérica de strings con números
  • Es ideal para ordenar arrays de strings internacionalmente
  • Resuelve problemas de ordenamiento en idiomas no ingleses

Introducción a localeCompare()

El método localeCompare() es una herramienta esencial para aplicaciones internacionales que necesitan comparar strings según las reglas de ordenamiento de un idioma específico. A diferencia de la comparación simple con operadores <, > o ===, localeCompare() respeta las reglas lingüísticas del idioma, incluyendo ordenamiento de caracteres especiales, acentos y mayúsculas/minúsculas.

Este método es especialmente importante en aplicaciones multilingües, sistemas de búsqueda y ordenamiento de listas donde los usuarios esperan un comportamiento consistente con su idioma. Sin localeCompare(), el ordenamiento puede parecer incorrecto o confuso para usuarios de idiomas con reglas de ordenamiento complejas.

Valores de Retorno de localeCompare()

localeCompare() devuelve un número negativo si el string original es menor que el de comparación, 0 si son iguales, o un número positivo si es mayor. En la práctica, los valores suelen ser -1, 0 o 1, pero no debes depender de estos valores exactos, solo del signo.

Uso Básico y Valores de Retorno

El uso básico de localeCompare() es simple: pasas el string con el que quieres comparar y opcionalmente el locale (idioma/region) que quieres usar. El método devuelve un número que indica el orden relativo de los strings según las reglas del idioma especificado.

localecompare-basico.js
Loading code...

Este ejemplo muestra el uso básico de localeCompare(). El método compara dos strings y devuelve -1, 0 o 1 según su orden relativo. El primer argumento es el string con el que comparas, y el segundo (opcional) es el locale que define las reglas de ordenamiento a usar.

Mejor Práctica para Ordenamiento Internacional

Usa localeCompare() como función de comparación en array.sort() para ordenar strings internacionalmente. Esto garantiza que el ordenamiento sea correcto según las reglas del idioma de los usuarios, no según el código ASCII.

Opciones de Localización

El locale (idioma/region) es el segundo argumento opcional de localeCompare(). Define las reglas de ordenamiento lingüísticas a usar, incluyendo cómo se ordenan caracteres especiales, acentos y mayúsculas/minúsculas. El locale sigue el formato estándar de código de idioma ISO 639-1, opcionalmente seguido de código de país ISO 3166-1.

localecompare-locales.js
Loading code...

Este ejemplo muestra cómo diferentes locales afectan el ordenamiento. En español, "ñ" viene después de "n", mientras que en inglés no hay reglas específicas para la ñ. En alemán, "ä" se ordena como "ae", mientras que en sueco es una letra separada después de "z". El locale correcto es crucial para ordenamiento preciso.

Códigos de Idioma Comunes

Códigos de locale comunes: es (español), en (inglés), en-US (inglés estadounidense), de (alemán), fr (francés), pt-BR (portugués brasileño), zh-CN (chino simplificado). Siempre verifica el código correcto para tu audiencia.

Opciones de Comparación

El tercer argumento de localeCompare() es un objeto de opciones que controla cómo se realiza la comparación. Las opciones más importantes son sensitivity (sensibilidad a mayúsculas, acentos y diacríticos) y numeric (comparación numérica de strings que contienen números).

localecompare-opciones.js
Loading code...

Este ejemplo muestra las opciones de comparación. sensitivity puede ser "base" (ignora mayúsculas y acentos), "accent" (distingue acentos pero no mayúsculas), "case" (distingue mayúsculas pero no acentos), o "variant" (distingue todo). numeric ordena "2" antes de "10", mientras que sin esta opción "10" viene antes de "2".

Comparación Numérica de Strings

La opción numeric: true es extremadamente útil para ordenar strings que contienen números. Con esta opción, "Capítulo 2" viene antes de "Capítulo 10", mientras que sin ella el orden sería incorrecto porque "1" es menor que "2" lexicográficamente.

Ordenamiento de Arrays

Uno de los casos de uso más comunes de localeCompare() es ordenar arrays de strings. Al usar localeCompare() como función de comparación en array.sort(), garantizas que el ordenamiento respete las reglas lingüísticas del idioma especificado.

localecompare-sort.js
Loading code...

Este ejemplo muestra cómo ordenar arrays con localeCompare(). El método sort() acepta una función de comparación que recibe dos elementos y devuelve un número negativo, cero o positivo. localeCompare() es perfecto para este propósito porque devuelve exactamente el tipo de valor que sort() espera.

Advertencia: Dependencia del Navegador

La implementación de localeCompare() y los locales disponibles dependen del navegador. Algunos navegadores pueden no soportar todos los locales o implementar las reglas de ordenamiento de manera diferente. Siempre verifica el comportamiento en los navegadores que necesitas soportar.

Casos Especiales

El método localeCompare() tiene comportamientos específicos con diferentes tipos de valores y configuraciones que es importante conocer. Desde el manejo de valores nulos hasta normalización Unicode y locales inexistentes, estos casos especiales pueden afectar el resultado de tus comparaciones.

casos-especiales.js
Loading code...

Este ejemplo muestra casos especiales importantes. Los valores undefined y null se convierten a strings ("undefined", "null") antes de comparar. Los strings vacíos se comparan correctamente (vacío es menor que cualquier carácter). La normalización Unicode puede afectar comparaciones: el mismo carácter puede representarse de diferentes formas en Unicode, y el resultado depende del navegador. Los locales inexistentes no lanzan error, simplemente usan el locale por defecto del sistema. numeric: true compara números en strings numéricamente sin importar su tamaño. Las opciones de sensitivity permiten controlar exactamente qué diferencias importan. Los espacios en blanco afectan el orden (espacios vienen antes que caracteres). Los caracteres especiales y símbolos tienen orden específico según el locale.

Casos de Uso Internacionales

localeCompare() es esencial en aplicaciones con usuarios internacionales. Desde ordenar listas de nombres hasta implementar sistemas de búsqueda sensibles al idioma, este método resuelve problemas que serían difíciles o imposibles de manejar con comparación simple de strings.

casos-uso.js
Loading code...

Este ejemplo muestra casos de uso prácticos. Ordenar nombres internacionales es un caso común donde localeCompare() es indispensable. Los nombres con caracteres especiales como "ñ", "á", "ö" se ordenan correctamente según las reglas del idioma. También puedes usar localeCompare() para implementar búsqueda fuzzy que ignore mayúsculas y acentos.

Las opciones de configuración más útiles de localeCompare() incluyen:

  • <code>sensitivity: "base"</code> - Ignora mayúsculas, acentos y diacríticos
  • <code>sensitivity: "accent"</code> - Distingue acentos pero no mayúsculas
  • <code>sensitivity: "case"</code> - Distingue mayúsculas pero no acentos
  • <code>sensitivity: "variant"</code> - Distingue mayúsculas, acentos y diacríticos
  • <code>numeric: true</code> - Ordena números dentro de strings numéricamente

Resumen: localeCompare()

Conceptos principales:

  • localeCompare() devuelve -1, 0 o 1 según el orden alfabético
  • El locale define las reglas de ordenamiento del idioma
  • Las opciones controlan sensibilidad y comparación numérica
  • Es ideal para ordenamiento internacional de strings
  • Resuelve problemas de ordenamiento en idiomas no ingleses
  • La implementación depende del navegador

Mejores prácticas:

  • Usa localeCompare() para ordenar arrays internacionalmente
  • Especifica el locale correcto para tu audiencia
  • Usa numeric: true para strings con números
  • Usa sensitivity: 'base' para búsqueda case-insensitive
  • Verifica el comportamiento en navegadores objetivo
  • Usa opciones específicas según el caso de uso