【问题标题】:React-Bootstrap-Table-Next Sort Alphanumeric Strings on Dynamic TableReact-Bootstrap-Table-Next 对动态表上的字母数字字符串进行排序
【发布时间】:2020-06-22 21:20:01
【问题描述】:

我有一个在 React-Bootstrap-Table-Next 中生成 70 多列的动态表。我在尝试按字母数字顺序对列进行排序时遇到问题(有些列是数字,有些列是字母)。输入列的数据都是字符串。我正在使用 sortFunc 但当然它只对数字字符串的列进行排序。如何让 sortFunc 对两者都进行排序?

这是我尝试过的功能。查看 sortFunc。

let columns = [];
let headers = Object.keys(this.props.reconDetails[0]); //creating the text for headers
const newColumn = {
   dataField: header,
   text: header,
   sort: true,
   sortFunc: (a, b, order, dataField) => {
      if (order === 'asc') {
          return b - a;
      }
       return a - b;
      };
   columns.push(newColumn);
   this.setState({
     columns
   })
}

引导表:

BootstrapTable
   striped
   headerClasses="tableHeader"
   classes="tableBody"
   wrapperClasses="table-responsive"
   keyField={"Case_Line_Number"}
   data={this.state.RECON_DETAIL}
   columns={this.state.columns}
   />

【问题讨论】:

    标签: javascript reactjs react-bootstrap-table


    【解决方案1】:

    在这里找到答案,因为它解释得很好。作者使用了 localeCompare 方法。 http://fuzzytolerance.info/blog/2019/07/19/The-better-way-to-do-natural-sort-in-JavaScript/

    我在下面解决了我的问题:

    sortFunc: (a, b, order, dataField) => {
       if (order === 'asc' || !order) {
           return b.localeCompare(a, navigator.languages[0] || navigator.language, {numeric: true, ignorePunctuation: true});
           }
           return a.localeCompare(b, navigator.languages[0] || navigator.language, {numeric: true, ignorePunctuation: true});
           },
    

    【讨论】:

    • 哇,这正是我想要的。我的字符串可以是数字、字母、日期,甚至是原始 HTML。这似乎对所有人都有效。干杯!
    猜你喜欢
    • 2021-02-21
    • 1970-01-01
    • 2013-06-05
    • 2021-09-19
    • 2021-09-17
    • 2021-02-22
    • 1970-01-01
    • 2020-11-13
    相关资源
    最近更新 更多