Reputation: 1447
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.
Upvotes: 1
Views: 4584
Reputation: 1489
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) ; and then sort using sorter: (a, b) => a.NPI - b.NPI
Upvotes: 2
Reputation: 955
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);
Upvotes: 2