React Table 没有正确排序数字
React Table not sorting numbers correctly
React-table 正在像这样对小数进行排序:
我的猜测是,虽然我从服务器接收到数字,但 react-table 将它们作为文本处理。所以,我像这样修改了访问器:
accessor: d => Number(d.Invoice_Weight).toFixed(2)
但我总是排序错误。
这是列的代码:
{
Header: () =>
<DropDownMenu
header={content[lang].Invoice_Weight}
openModal = {this.onOpenSelectColumnsModal}
/>,
id: 'Invoice_Weight',
sortable: true,
accessor: d => Number(d.Invoice_Weight).toFixed(2),
//width: 200,
getProps: () => {
return {
style: {
textAlign: 'right'
}
}
},
show: Invoice_Weight,
},
我猜这是由于 .toFixed()
returns 一个字符串造成的,所以它仍然将它们作为字符串进行排序。因此,如果你想将数字四舍五入并保留两位小数,你必须这样做:
accessor: d => Number(Number(d.Invoice_Weight).toFixed(2))
所以先转为数字,四舍五入为小数点后两位的字符串,再转回数字。
正如其他答案中所建议的那样,问题是 toFixed
returns 一个字符串,因此将使用字符串比较来完成排序。但是,在这种情况下强制返回数字将不起作用,因为那样您将丢失尾随 0
s,我猜您仍然需要它。
另一个解决方案是使用自定义排序:
accessor: d => Number(d.Invoice_Weight).toFixed(2),
sortMethod: (a, b) => Number(a)-Number(b)
您可能想要改进 sortMethod
以处理 NaN 和无穷大(如果有的话),但这是一般的想法
您可以使用此方法将字符串强制转换回数字,但仅限于排序上下文而不影响显示值
React 的默认排序方法 Table 提供排序 string.so 你必须使用 React Table.
提供的 sortMethod 道具
sortMethod: (a, b) => {
a = Number(a); // Converting into number
b = Number(b); // Converting into number
if (a.length === b.length) {
return a > b ? 1 : -1; // same length condition
}
return a.length > b.length ? 1 : -1; // comparing length of string
}
React-table 正在像这样对小数进行排序:
我的猜测是,虽然我从服务器接收到数字,但 react-table 将它们作为文本处理。所以,我像这样修改了访问器:
accessor: d => Number(d.Invoice_Weight).toFixed(2)
但我总是排序错误。
这是列的代码:
{
Header: () =>
<DropDownMenu
header={content[lang].Invoice_Weight}
openModal = {this.onOpenSelectColumnsModal}
/>,
id: 'Invoice_Weight',
sortable: true,
accessor: d => Number(d.Invoice_Weight).toFixed(2),
//width: 200,
getProps: () => {
return {
style: {
textAlign: 'right'
}
}
},
show: Invoice_Weight,
},
我猜这是由于 .toFixed()
returns 一个字符串造成的,所以它仍然将它们作为字符串进行排序。因此,如果你想将数字四舍五入并保留两位小数,你必须这样做:
accessor: d => Number(Number(d.Invoice_Weight).toFixed(2))
所以先转为数字,四舍五入为小数点后两位的字符串,再转回数字。
正如其他答案中所建议的那样,问题是 toFixed
returns 一个字符串,因此将使用字符串比较来完成排序。但是,在这种情况下强制返回数字将不起作用,因为那样您将丢失尾随 0
s,我猜您仍然需要它。
另一个解决方案是使用自定义排序:
accessor: d => Number(d.Invoice_Weight).toFixed(2),
sortMethod: (a, b) => Number(a)-Number(b)
您可能想要改进 sortMethod
以处理 NaN 和无穷大(如果有的话),但这是一般的想法
您可以使用此方法将字符串强制转换回数字,但仅限于排序上下文而不影响显示值
React 的默认排序方法 Table 提供排序 string.so 你必须使用 React Table.
提供的 sortMethod 道具sortMethod: (a, b) => {
a = Number(a); // Converting into number
b = Number(b); // Converting into number
if (a.length === b.length) {
return a > b ? 1 : -1; // same length condition
}
return a.length > b.length ? 1 : -1; // comparing length of string
}