Javascript排序不返回正确的订单号

时间:2018-04-17 07:18:27

标签: javascript jquery

我使用sort()来过滤包含数字的数据的列表,但是数字存在问题,较大的数字在顶部而不是在底部排序。

列表并不总是数字。

<ul class="fliter-container">
    <li data-filter="100 x 10"> 100 x 10 </li>
    <li data-filter="101 11"> 101 x 11 </li>
    <li data-filter="109"> 109 </li>
    <li data-filter="someword"> someword </li>
    <li data-filter="17"> 17 </li>
    <li data-filter="18"> 18 </li>
    <li data-filter="my filter"> my filter </li>
    <li data-filter="19"> 19 </li>
</ul>

$('.filter-container').each(function(){

    var mylist    = $(this);
    var listitems = mylist.children('[data-filter]').get();

    listitems.sort(function(a, b) {

       return $(a).attr('data-filter').toUpperCase().localeCompare($(b).attr('data-filter').toUpperCase() , undefined, {numeric: true, sensitivity: 'base'});

    });

    $.each(listitems, function(idx, itm) { 
       mylist.append(itm); 
    });

});

更新:我更新了我的代码,在此处找到了解决方案Javascript : natural sort of alphanumerical strings

1 个答案:

答案 0 :(得分:0)

编辑:鉴于您稍后添加到帖子中的新信息(即值也可以是非数字),当然这个答案不再有效......

原始答案:

您正在排序字符串,而不是数字。如果您希望将它们保留为字符串,请在排序时将其修改为xy,以便将它们转换为数字,以便进行比较,例如

var x = parseInt($(a).attr('data-filter'));
var y = parseInt($(b).attr('data-filter'));