Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

367
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!