简体   繁体   English

antd表中的排序号

[英]Sort number in antd Table

I want to sort a number column... I tried the normal sorting method but the result is not correct.我想对数字列进行排序...我尝试了正常的排序方法,但结果不正确。

 const columns = [
      {
        title: 'NPI',
        dataIndex: 'NPI',
        key: 'NPI',
        sorter: (a, b) => a.NPI.localeCompare(b.NPI),
        render: (val, record) => <div title={'NPI: ' + val} className="text_overlap">{val}
            </div>
      }];

结果 the result I got after sorting is given in the image.图像中给出了排序后得到的结果。

You can use below login to sort your number, In the below example, I am sorting according to the name, age, and address.您可以使用下面的登录名对您的号码进行排序,在下面的示例中,我根据姓名、年龄和地址进行排序。

you can see the age logic and according to that, you can manipulate your code.您可以看到年龄逻辑,并据此操作您的代码。

import { Table } from 'antd';

const columns = [
  {
    title: 'Name',
    dataIndex: 'name',
    filters: [
      {
        text: 'Joe',
        value: 'Joe',
      },
      {
        text: 'Jim',
        value: 'Jim',
      },
      {
        text: 'Submenu',
        value: 'Submenu',
        children: [
          {
            text: 'Green',
            value: 'Green',
          },
          {
            text: 'Black',
            value: 'Black',
          },
        ],
      },
    ],
    // specify the condition of filtering result
    // here is that finding the name started with `value`
    onFilter: (value, record) => record.name.indexOf(value) === 0,
    sorter: (a, b) => a.name.length - b.name.length,
    sortDirections: ['descend'],
  },
  {
    title: 'Age',
    dataIndex: 'age',
    defaultSortOrder: 'descend',
    sorter: (a, b) => a.age - b.age,
  },
  {
    title: 'Address',
    dataIndex: 'address',
    filters: [
      {
        text: 'London',
        value: 'London',
      },
      {
        text: 'New York',
        value: 'New York',
      },
    ],
    filterMultiple: false,
    onFilter: (value, record) => record.address.indexOf(value) === 0,
    sorter: (a, b) => a.address.length - b.address.length,
    sortDirections: ['descend', 'ascend'],
  },
];

const data = [
  {
    key: '1',
    name: 'John Brown',
    age: 32,
    address: 'New York No. 1 Lake Park',
  },
  {
    key: '2',
    name: 'Jim Green',
    age: 42,
    address: 'London No. 1 Lake Park',
  },
  {
    key: '3',
    name: 'Joe Black',
    age: 32,
    address: 'Sidney No. 1 Lake Park',
  },
  {
    key: '4',
    name: 'Jim Red',
    age: 32,
    address: 'London No. 2 Lake Park',
  },
];

function onChange(pagination, filters, sorter, extra) {
  console.log('params', pagination, filters, sorter, extra);
}

ReactDOM.render(<Table columns={columns} dataSource={data} onChange={onChange} />, mountNode);
const columns = [
      {
        title: 'NPI',
        dataIndex: 'NPI',
        key: 'NPI',
        sorter: (a, b) => a.NPI - b.NPI,
        render: (val, record) => <div title={'NPI: ' + val} className="text_overlap">{val}
            </div>
      }];

When debugged,if NPI is a character/string convert it into number(integer);调试时,如果 NPI 是字符/字符串,则将其转换为数字(整数); and then sort using sorter: (a, b) => a.NPI - b.NPI然后使用排序sorter: (a, b) => a.NPI - b.NPI

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM