如何使用jQuery“ sortElements”插件对数字列进行排序?

时间:2018-12-20 22:32:03

标签: javascript jquery

我在我的表上使用jQuery脚本“ sortElements”对它们的列进行排序,但是我注意到在数字列中进行排序不起作用。对它们进行排序的结果类似于“ 100 20 250 30”。我不明白如何解决这个问题。你能帮我吗?

这是“ sortElements”脚本:https://j11y.io/javascript/sorting-elements-with-jquery/

这是我在页面中使用的脚本:

var table = $('table');

$('table th')
.wrapInner('')
.each(function(){

    var th = $(this),
        thIndex = th.index(),
        inverse = false;

    th.click(function(){
        table.find('td').filter(function(){

            return $(this).index() === thIndex;

        }).sortElements(function(a, b){

            if( $.text([a]) == $.text([b]) )
                return 0;

            return $.text([a]) > $.text([b]) ?
                inverse ? -1 : 1
                : inverse ? 1 : -1;

        }, function(){

            // parentNode is the element we want to move
            return this.parentNode; 

        });

        inverse = !inverse;

    });

});

我在以下问题中找到了解决方案:jquery sortElement: sort by numerical value of table data

我在先前的研究中没有找到它。

2 个答案:

答案 0 :(得分:0)

您当前正在比较字符串,并且将字符串进行比较lexicographically,这意味着,当您将数字说成字符串时,它们是按其数字的较大值而不是它们的数字的顺序排列的实际价值。本质上,对包含数字的字符串进行排序会首先获取所有1,然后如果有多个以1开头的数字,它们将查看下一个数字,依此类推。请参阅以下示例:


演示1:

var numbers = ["2", "4", "3", "1"];
numbers.sort((a, b) => a > b);
console.log(numbers);

在这里,数字都是个位数,这意味着它们将以正确的方式排列。


演示2:

var numbers = ["1", "4", "7", "12"];
numbers.sort((a, b) => a > b);
console.log(numbers);

在这里,我们有一个数字147,它们以正确的顺序排序,但是我们还有12,它是放在1之后。这是因为其第一位数字是1,与1值相同,因此将两个数字的第二位数字进行比较。由于2大于1的第二位数字(无),因此将其排在1之后。


演示3:

var numbers = ["10", "1", "1.3", "5", "76", "6001"];
numbers.sort((a, b) => a > b);
console.log(numbers);

在此示例中,您可以看到1排在第一位,因为没有第二位数字。 1之后的下一项是1.3,其后是10,这意味着小数点在词典上比0小。


您应该做的是将要比较的内容转换为数字,如下所示:

sortElements(function(a, b){
    a = parseInt(a);
    b = parseInt(b);
    if( $.text([a]) == $.text([b]) )
        return 0;
    return $.text([a]) > $.text([b]) ? inverse ? -1 : 1 : inverse ? 1 : -1;
}

希望这会有所帮助!

答案 1 :(得分:0)

我在以下问题中找到了解决方案:jquery sortElement: sort by numerical value of table data

我在先前的研究中没有找到它。