• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

128
Vistas
Mejor forma de convertir a minúsculas solo si es de tipo cadena

Necesito ordenar una tabla que tiene columnas de diferentes tipos de datos. El problema de ordenar las cadenas es que distinguen entre mayúsculas y minúsculas. el codigo original es

 const Details = sortWith( sortDir === 'ASC' ? ascend((row) => row.data[col]) : descend((row) => row.data[col]) )

y lo actualicé a lo siguiente que funciona

 const Details = sortWith( sortDir === 'ASC' ? ascend((row) => typeof row.data[col] === 'string' ? row.data[col].toLowerCase() : row.data[col]) : descend((row) => typeof row.data[col] === 'string' ? row.data[col].toLowerCase() : row.data[col]) )

¿Hay una mejor manera de hacer esto?

about 3 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Bienvenido a Stack Overflow. Por favor, en el futuro, intente publicar un ejemplo mínimo reproducible con su pregunta.

No estoy seguro de si esto ayudará, pero aquí hay un generador de funciones de clasificación basado en la configuración, construido sobre las capacidades de clasificación de Ramda:

 const mySorter = (config) => sortWith (config .map ( ({col, sortDir = 'ASC'}) => (sortDir == 'ASC' ? ascend : descend) (pipe (path (['data', col]), when (is (String), toLower))) )) const data = [{data: {first: 'Fred', last: 'Flintstone', age: 31}}, {data: {first: 'Wilma', last: 'Flintstone', age: 29}}, {data: {first: 'pebbles', last: 'flintstone', age: 1}}, {data: {first: 'Barney', last: 'Rubble', age: 29}}, {data: {first: 'bambam', last: 'Rubble', age: 1.5}}, {data: {first: 'Betty', last: 'Rubble', age: 33}}] console .log ( mySorter ([{col: 'age'}, {col: 'last', sortDir: 'DESC'}]) (data) ) console .log (mySorter ([{col: 'first'}]) (data))
 .as-console-wrapper {max-height: 100% !important; top: 0}
 <script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.28.0/ramda.min.js"></script> <script>const {sortWith, ascend, descend, pipe, path, when, is, toLower} = R</script>

La parte sobre poner en minúsculas solo las cadenas es when (is (String), toLower) , que parece eminentemente legible.

about 3 years ago · Juan Pablo Isaza Denunciar

0

Si desea evitar repetirse en la clasificación, puede aislar la función typecheck:

 const stringCheck = (row) => typeof row.data[col] === 'string' ? row.data[col].toLowerCase() : row.data[col]

y entonces:

 const Details = sortWith( sortDir === 'ASC' ? ascend(stringCheck) : descend(stringCheck) )
about 3 years ago · Juan Pablo Isaza Denunciar

0

Puede usar la llamada de función opcional, se ejecutará solo si ese método está definido para el tipo:

 row.data[col].toLowerCase?.() ?? row.data[col]

La llamada de función opcional devolverá undefined si el método no está definido, por esta razón necesitamos ?? row.data[col] para recuperar el valor anterior.

about 3 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 Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda