Elffuss Elffuss CodeProyecto del día
Proyecto del día · 18 de octubre de 2026

Álvarez salía detrás de Zamora, y al arreglarlo Peña y Pena se volvieron la misma nadadora

Lucía solo quería sacar ordenada por apellido la lista de dorsales del club de natación. El primer arreglo ordenó bien la lista y, de paso, hizo desaparecer a una niña cuando se abría en un navegador en inglés.

El IDE con IA local en el navegadorlocal · en el navegador

Lucía lleva las inscripciones del club de natación de su barrio. Son ciento y pico chavales y una hoja que hasta ahora se ordenaba a mano. Un viernes por la tarde decidió hacerse una página pequeña para sacar la lista de dorsales ordenada por apellido. Una función, un sort(), y a imprimir.

La lista salió con Zamora a media página y, detrás, Álvarez, Écija e Íñiguez, como si se hubieran apuntado tarde. Y al final del todo, «de la Fuente» y «del Río», los de la minúscula.

Lo que hace sort() cuando no le dices nada

Abrió Elffuss Code, pegó la función con tres nombres reales que salían mal y le preguntó al modelo por qué. La respuesta fue directa: sin comparador, sort() compara unidades de código UTF-16, no letras. Las mayúsculas van antes que las minúsculas y cualquier vocal con tilde acaba detrás de la zeta. No es un fallo del navegador. Es el comportamiento documentado, y casi nunca es lo que quieres para nombres de personas.

La propuesta fue crear un Intl.Collator('es', { sensitivity: 'base' }) y pasar su compare al sort. Álvarez volvió a la A, «de la Fuente» se colocó en la D y la eñe quedó donde la espera cualquiera que aprendiera el abecedario en castellano: entre la ene y la o.

El arreglo que se llevó a una nadadora

Animada, Lucía usó el mismo truco para otra cosa que le daba guerra, los duplicados. Hay familias que rellenan el formulario dos veces, una con «García» y otra con «Garcia». Escribió de memoria una comparación con localeCompare(b, undefined, { sensitivity: 'base' }), la probó en su portátil y funcionaba.

El lunes la abrió en el ordenador del club, que tiene el navegador en inglés, y en la lista faltaba una nadadora. Marta Peña y Marta Pena, dos niñas distintas de dos familias distintas, se habían quedado en una sola.

Volvió a preguntarle al modelo con esos dos nombres delante. Le explicó que ese undefined significa «usa el idioma del navegador», y que en la ordenación genérica la eñe es una ene con un acento encima. Con sensitivity: 'base' los acentos se ignoran, así que Peña y Pena empatan. En la ordenación española la ñ es una letra propia y nunca empata con la ene. Mismo código, dos resultados distintos según dónde se abra.

El arreglo final tiene dos partes:

Por qué esto no podía ir a un chat cualquiera

Para depurarlo había que enseñarle al modelo los datos que fallaban: nombres y apellidos de menores, con la fecha de nacimiento al lado. Inventarse ejemplos no habría servido, porque el fallo solo aparecía con Peña y Pena juntas. Como el modelo corre en la propia pestaña, sobre la GPU de su ordenador, pegar esas filas no era mandar la ficha del club a ningún sitio. No tuvo que anonimizar nada ni pedir permiso a nadie, porque la lista nunca salió del navegador.

Lo que me llevo: cuando ordenas o comparas nombres de personas, el idioma es parte del dato. Si no lo fijas tú, lo decide el navegador de quien abra la página.

Abre Elffuss Code y depura tu próxima función con los datos de verdad: el modelo corre en tu navegador y no sube nada a ningún servidor.

Abrir Code →
nada de esto se sube a ningún sitio