首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当表上的字符串中有逗号时,javascript不排序

问当表上的字符串中有逗号时,javascript不排序
EN

Stack Overflow用户
提问于 2016-05-17 04:33:49
回答 2查看 739关注 0票数 1

我正在使用标准的Javascript " sort“函数对表中列中的元素进行排序。问题是那个人让我每三位加一个逗号,然后加一个。小数点后两位。

我的第一次搜索工作正常时,我有:

456345.00 456948.00 456949.34

但是现在当我输入的时候,它不能排序

456,949.34

我需要一种方法来覆盖.sort和.reverse javascript函数!

或者我需要以某种方式删除逗号。和分数部分,然后相应地排序,然后添加细节。

以下是示例源代码

代码语言:javascript
复制
 $('#results').on("click", "th", function(){ 

    var table = $(this).parents('table').eq(0)
    var rows = table.find('tr:gt(0)').toArray();
    rows.splice(-1, 1);
    rows.sort(comparer($(this).index()));
    this.asc = !this.asc
    if (!this.asc){rows = rows.reverse()}

    for (var i = 0; i < rows.length; i++){table.append(rows[i])}
})
function comparer(index) {
    return function(a, b) {
        var valA = getCellValue(a, index), valB = getCellValue(b, index)
        return $.isNumeric(valA) && $.isNumeric(valB) ? valA - valB : valA.localeCompare(valB)
    }
}
function getCellValue(row, index){ return $(row).children('td').eq(index).text() }



  });
EN

回答 2

Stack Overflow用户

发布于 2016-05-17 05:00:57

Javascript array sort接受一个比较器函数,该函数作用于实际数组中的值。不需要读取外部数据(我假设您的比较器正在尝试这样做)。

这应该足够了

代码语言:javascript
复制
function comparer(a, b) {
  a = parseFloat(a.replace(/,/g,''));
  b = parseFloat(b.replace(/,/g,''));

  return a-b;

}

这将获取数组,并(在排序中)删除逗号,将其转换为浮点数,并返回比较结果,从而得到正确排序的数组,其中仍包含逗号格式的项。

票数 1
EN

Stack Overflow用户

发布于 2016-05-17 06:37:27

构建在@Wainage的answer...replace上,您已经使用下面的代码发布了整个代码。我删除了数字中的逗号和小数,因为在我的理解中,当你将12.34与12.23进行比较时,无论有没有小数点,答案都是一样的。

因此12.34 > 12.23和1234 > 1223

在我的小提琴中,我使用了大数和逗号,例如。555,444,440.00我假设这些数字小于9007199254740991,这是整数大小的限制。

这里有一个指向fiddle http://jsfiddle.net/pparas/Zhd2X/694/的链接

代码语言:javascript
复制
$('th').click(function(){
        var table = $(this).parents('table').eq(0)
        var rows = table.find('tr:gt(0)').toArray();
        rows.splice(-1, 1);
        rows.sort(comparer($(this).index()));
        this.asc = !this.asc
        if (!this.asc){rows = rows.reverse()}
        for (var i = 0; i < rows.length; i++){table.append(rows[i])}
    })
    function comparer(index) {
        return function(a, b) {
            var valA = getCellValue(a, index), valB = getCellValue(b, index);
            if(($.isNumeric(valA.replace(/[,.]/g,''))) && ($.isNumeric(valB.replace(/[,.]/g,'')))){
                valA = parseInt(valA.replace(/[,.]/g,''));
                valB = parseInt(valB.replace(/[,.]/g,''));
            }
            return $.isNumeric(valA) && $.isNumeric(valB) ? valA - valB : valA.localeCompare(valB)
        }
    }

    function getCellValue(row, index){ return $(row).children('td').eq(index).html() }

谢谢,

Paras

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37262799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档