首页 > 解决方案 > 在 html-table 中对美国格式的列进行排序

问题描述

我正在使用 html-table 来显示数据。我的表中有一个名为的列Charges,它以美国格式显示货币。数据来自数组集合patientsSearchData。(我想在单击图标时对费用进行升序和降序排序)

示例列格式

在此处输入图像描述

 new Intl.NumberFormat('en-USD', { currency: 'USD', style: 'currency' }).format(Number(Item.Charges))

以上代码用于美元格式。

费用来自字符串格式的数组

例如:

var 费用 =[“1,416.20”、“807.21”、“42.82”、“187.17”]

我应用的排序是:

sort(event) {
        const {patientsSearchData } = this.state;
        const { SearchList } = this.props;
        var search = [];
        if (SearchList.length == 0) {
                search = _.orderBy(patientsSearchData, (o) => typeof o[event.target.id] === 'string' ? o[event.target.id].trim().toLowerCase() : o[event.target.id], order[event.target.id] ? 'asc' : 'desc');
                this.setState({
                orderby: event.target.id,
                patientsSearchData: search,
            });
        }

在排序(按升序)并应用 USD 格式后,它在 html-table 中的外观如下所示:

1,416.20 美元

187.17 美元

42.82 美元

807.21 美元

实际上我需要的是:

42.82 美元

187.17 美元

807.21 美元

1,416.20 美元

标签: reactjssortinghtml-table

解决方案


sort如果数组中的值仅包含数字或小数点,我又对函数进行了一次检查。

else if (event.target.id === 'Charges'){
                search = _.orderBy(patientsSearchData, (o) => o[event.target.id].match(/^\d+(\.\d+)?$/) ? Math.floor(o[event.target.id]) : o[event.target.id], order[event.target.id] ? 'asc' : 'desc');
            }

推荐阅读