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

364
Vistas
clasificación sensible a mayúsculas y minúsculas en javascript, donde todas las letras mayúsculas vienen antes que todas las letras minúsculas

Necesito ordenar dos cadenas de manera que las letras mayúsculas estén primero, incluso para letras diferentes, por ejemplo:

El gato viene antes que la hormiga

CD viene antes de Cd

¿Puedo usar localCompare para ordenar así?

 const sortString = (a, b) => String(a).localeCompare(b);
about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

No, no puede (y no necesita) usar localeCompare para eso. ¡Lo que describe es solo la comparación de cadenas estándar, que coloca las letras en orden alfabético y las letras mayúsculas antes que las minúsculas!

Así que todo lo que necesitas hacer es

 arr.sort((a, b) => +(a>b)||-(b>a))

que para las cadenas es lo mismo que la función de comparación alternativa predeterminada, por lo que solo puede hacer

 arr.sort()
about 4 years ago · Santiago Trujillo Denunciar

0

Mi función devuelve 1 si la primera cadena es mayor, -1 si la primera cadena es menor que y 0 si es igual a la segunda cadena.

 // return value like compare function const findCompareValue = (flag) => { if (flag) { return -1; } else { return 1; } } const compareCaseSensitive = (a, b) => { // find min length just in case two string don't have the same length const minLen = a.length > b.length ? b.length : a.length; let i = 0; const minLowerCaseCharCode = 97; const maxLowerCaseCharCode = 122; const minUpperCaseCharCode = 65; const maxUpperCaseCharCode = 90; while (true && i !== minLen) { // get char code const aCharCode = a[i].charCodeAt(); const bCharCode = b[i].charCodeAt(); // check whether character is uppercase const isACharUpperCase = minUpperCaseCharCode <= aCharCode && aCharCode <= maxUpperCaseCharCode; const isBCharUpperCase = minUpperCaseCharCode <= bCharCode && bCharCode <= maxUpperCaseCharCode; if (isACharUpperCase) { if (isBCharUpperCase && bCharCode !== aCharCode) { // two characters are uppercase and different return findCompareValue(aCharCode < bCharCode); } else if (aCharCode !== bCharCode) { // second character is lowercase return 1; } } else { if (isBCharUpperCase) { // second string is uppercase return -1; } else if (aCharCode !== bCharCode) { // two characters are lowercase and different return findCompareValue(aCharCode < bCharCode); } } i += 1; } return 0; } const a = 'CD'; const b = 'cD'; console.log('result', compareCaseSensitive(a, b));
about 4 years ago · Santiago Trujillo Denunciar

0

¿Puedes probar esto, no estoy seguro de que todos los requisitos estén satisfechos o no?

Entrada: ['Cat', 'March', 'aJan', 'Feb', 'Feb', 'Dd', 'DD', 'ant', 'cat', 'AMC', 'AMBulance', 'Feb' ,'CD' , 'CD']

Salida: ["AMBulance", "AMC", "CD", "Cat", "Cd", "DD", "Dd", "Feb", "Feb", "Feb", "March", "aJan" , "hormiga", "gato"]

 const months = ['Cat', 'March', 'aJan','Feb', 'Feb', 'Dd', 'DD', 'ant', 'cat', 'AMC', 'AMBulance', 'Feb','Cd' , 'CD'] function _sort(a,b) { const aLenth = a.length const bLenth = b.length const aArr = a.match(/^[AZ]*/g ) const bArr = b.match(/^[AZ]*/g ) const isCapA = Array.isArray(aArr) && !!aArr[0].length const isCapB = Array.isArray(bArr) && !!bArr[0].length const isBothCapital = isCapA && isCapB // then check usual way const isBothSimple = !isCapA && !isCapB // then check usual way //console.log(a, b, isBothCapital, aArr.length, bArr.length) if (isBothCapital || isBothSimple){ if (a === b ) { return 0 } if (aArr[0].length === bArr[0].length) { return a.localeCompare(b); } //return a.localeCompare(b); return aArr[0].length - bArr[0].length ? 1 : -1 } if (isCapA) { return -1 } return 1 } const _simpSort = (a,b ) => { return a.localeCompare(b) } const capLetters = months.filter(x => x.match(/^[AZ]/g)) const simpLetters = months.filter(x => x.match(/^[az]/g)) const formatted = [...capLetters.sort(_simpSort), ...simpLetters.sort(_simpSort)] const groupBy = formatted.reduce((acc, i) => { const isExists = acc[i.charAt(0)] const ele = typeof isExists !== "undefined" ? isExists : [] const tmp = { [i.charAt(0)]: [i, ...ele] } return { ...acc, ...tmp} }, {}) const final = [] for (ele in groupBy) { const tmpRow = groupBy[ele].sort(_sort) final.push(tmpRow) } console.log(final.join().split(","))
about 4 years ago · Santiago Trujillo 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