按字母顺序对表格排序

时间:2019-04-23 09:13:19

标签: reactjs function sorting

我有一张桌子,上面有数字和单词。我想通过单击标题对其进行排序。

我已经有一个对数字进行排序的功能,但是单词功能不起作用。

我尝试过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开头的文本,然后是表的其余部分正确排序。

Table

排序后,我正在使用.map函数映射表

我来自波兰,因此也需要对波兰字母进行排序。我正在使用UTF-8。

1 个答案:

答案 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>