我有一张桌子,上面有数字和单词。我想通过单击标题对其进行排序。
我已经有一个对数字进行排序的功能,但是单词功能不起作用。
我尝试过localeCompare和排序功能,如下所示:
data2.sort((a, b) => {
if (a[id] < b[id]) return -1;
if (a[id] > b[id]) return 1;
return 0;
localCompare函数:
sortowanieNazwy = (id) => {
const { data2} = this.state;
data2.sort((a, b) => a[id].localeCompare(b[id]))
this.setState({ data2 })
}
我从这样的API获取数据:
axios
.get("http://localhost/api?", {params : {rok : this.state.rok, }, headers: { 'Authorization' : 'Bearer '+ this.state.token }})
.then(response =>
response.data.map(data2 => ({
IDA: `${data2.id}`,
Pozycja: `${data2.pozycja}`,
...
}))
)
.then(data2 => {
this.setState({ data2 });
}
})
}
并制作表格:
data2.map(user => {
const { IDA...} = user;
return (
<>
<tr id={IDA}>
<td ><p>{Dzial}</p></td>
...
</tr>
函数localeCompare可以在90%中正常工作,前2/3行不能正确排序。 我正在对红色列进行排序。第3行是空的,然后是以D开头的文本,然后是以Z开头的文本,然后是表的其余部分正确排序。
排序后,我正在使用.map函数映射表
我来自波兰,因此也需要对波兰字母进行排序。我正在使用UTF-8。
答案 0 :(得分:0)
localeCompare完美运行:
const alphabet = _.shuffle(['a', 'ą', 'b', 'c', 'ć', 'd', 'e', 'ę', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'ł', 'm', 'n', 'ń', 'o', 'ó', 'p', 'r', 's', 'ś', 't', 'u', 'w', 'y', 'z', 'ź', 'ż'])
console.log('Shuffled: ', alphabet.toString())
alphabet.sort((a, b) => a.localeCompare(b))
console.log('Sorted: ', alphabet.toString())
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>