es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Formateo de números en tablas de antD, o comparación de cadenas de números con comas utilizando localeCompare().

Tengo valores que quiero mostrar en una tabla de AntD. Quiero que sean ordenables, pero también formateados con comas, como “1,000”. Idealmente, los almacenaría en el estado de React como enteros y luego los formatearía como cadenas con comas al mostrarlos, pero no he encontrado una forma en las tablas de AntD para hacer esta conversión en el último momento. Aquí tienes un ejemplo de un elemento JSX de columna que muestra enteros sin formato pero ordenables:

<column title="Población" dataindex="population" key="population" sorter="{(a," b)=""> a.population - b.population}
/>

He intentado convertir todo mi estado a cadenas formateadas y luego la tabla los muestra correctamente, pero el ordenamiento se desordena. Pensé que localeCompare con numeric = true arreglaría esto, pero no lo hace.

Con esta entrada:

let arr = ['999', '1,000', '1,001'];
console.log(
  arr.sort((a, b) =>
    a.localeCompare(b, undefined, {
      numeric: true,
      ignorePunctuation: true,
    })
  )
);

Espero que la entrada esté ordenada de forma numérica, pero no lo está. Quizás no entiendo cómo funciona localeCompare(). Este es el resultado:

[ "1,000", "1,001", "999" ]

Así que tengo dos preguntas, y responder cualquiera de ellas solucionaría mi problema:

  1. ¿Puedo tener una tabla de AntD con columnas que formateen enteros en un formato legible al mostrarlos, y si es así, cómo?
  2. Si no es posible, ¿cómo puedo simplemente ordenar representaciones de cadenas de enteros con comas (y cantidades en dólares, por cierto)? Podría usar expresiones regulares aquí, por supuesto, pero espero que haya una solución más sencilla que haya pasado por alto. Cambiar enteros a cadenas y luego volver a convertirlos en enteros para ordenarlos parece muy tonto.
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Ordenación y formato de valores en tablas de AntD

    Como experto en TI especializado en javascript, reactjs y antd, aquí tienes mi consejo sobre cómo ordenar y formatear valores en una tabla de AntD:

    Formato de valores en tablas de AntD

    Para mostrar valores en tu tabla de AntD con comas, puedes utilizar la propiedad render con una función personalizada que formatee tus valores como cadenas de texto con comas. Aquí tienes un ejemplo:

    <column title="Población" dataindex="poblacion" key="poblacion" sorter="{(a," b)=""> a.poblacion - b.poblacion}
      render={(value) => {
        return value.toLocaleString();
      }}
    />
    

    Este código mostrará tus valores con comas, como “1,000”, y aún permitirá ordenarlos haciendo clic en el encabezado de la columna.

    Ordenación de valores numéricos formateados

    Si tienes valores almacenados en el estado de tu componente React como enteros y deseas mostrarlos como cadenas de texto formateadas con comas, aún puedes ordenarlos numéricamente utilizando la función sort con una función comparadora personalizada que convierte tus cadenas de texto formateadas nuevamente en enteros antes de ordenarlos. Aquí tienes un ejemplo:

    let arr = ['999', '1,000', '1,001'];
    console.log(
      arr.sort((a, b) =>
        parseInt(a.replace(/,/g, '')) - parseInt(b.replace(/,/g, ''))
      )
    );
    

    Este código ordenará tus valores numéricamente, pero los mostrará en tu tabla de AntD con comas. La función replace se utiliza para eliminar las comas de tus cadenas de texto formateadas antes de convertirlas nuevamente en enteros para ordenar.

    ¡Espero que esto sea de ayuda! Déjame saber si tienes alguna otra pregunta.

Comments are closed.