reactjs - 如何在 React JS 中对字符串进行排序
问题描述
我有一张来自 Ant Design 的表格,我想对一列进行排序。这个专栏是name
。
const data = [
{
key: "1",
name: "John Brown",
age: 32,
address: "New York No. 1 Lake Park"
},
{
key: "2",
name: "Carl 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"
}
];
class App extends React.Component {
state = {
filteredInfo: null,
sortedInfo: null
};
handleChange = (pagination, filters, sorter) => {
console.log("Various parameters", pagination, filters, sorter);
this.setState({
filteredInfo: filters,
sortedInfo: sorter
});
};
clearFilters = () => {
this.setState({ filteredInfo: null });
};
clearAll = () => {
this.setState({
filteredInfo: null,
sortedInfo: null
});
};
setAgeSort = () => {
this.setState({
sortedInfo: {
order: "descend",
columnKey: "age"
}
});
};
render() {
let { sortedInfo } = this.state;
sortedInfo = sortedInfo || {};
const columns = [
{
title: "Name",
dataIndex: "name",
key: "name",
sorter: (a, b) => a.name.length - b.name.length,
sortOrder: sortedInfo.columnKey === "name" && sortedInfo.order,
ellipsis: true
},
{
title: "Age",
dataIndex: "age",
key: "age",
sorter: (a, b) => a.age - b.age,
sortOrder: sortedInfo.columnKey === "age" && sortedInfo.order,
ellipsis: true
},
{
title: "Address",
dataIndex: "address",
key: "address",
sorter: (a, b) => a.address.length - b.address.length,
sortOrder: sortedInfo.columnKey === "address" && sortedInfo.order,
ellipsis: true
}
];
return (
<>
<Table
columns={columns}
dataSource={data}
onChange={this.handleChange}
/>
</>
);
}
}
现在,当我按升序排序时,数据没有以正确的方式排序。为什么?以及如何解决?
演示:https ://codesandbox.io/s/reset-filters-and-sorters-antd494-forked-m3ljo?file=/index.js:143-2169
解决方案
试试这个排序功能的名字:
sorter: (a, b) => a.name.toUpperCase().localeCompare(b.name.toUpperCase())
推荐阅读
- java - 更改最终对象的属性属性对象
- terraform - terraform:如何使资源具有幂等性-即,如果不存在则创建,但如果存在则不执行任何操作
- python - 多行三引号原始字符串正则表达式不起作用
- javascript - 如何在循环中使用正则表达式替换来更改文本
- c++ - 模板和显式特化
- kentico - Kentico 使用 API 将文件上传到页面类型的文件字段
- google-assistant-sdk - actions-on-google/smart-home-nodejs “家庭控制”在哪里
- javascript - Javascript重用promise来管理多个调用
- python - Python - 使用 .mean() 和 .agg() 对多列进行分组
- google-analytics - 未触发 Google 跟踪代码管理器代码 - 在使用 dataLayer 进行虚拟页面查看的情况下