Javascript 使用jquerysort按两个数据属性对元素进行排序

Javascript 使用jquerysort按两个数据属性对元素进行排序,javascript,jquery,Javascript,Jquery,我有一个li元素,有两个数据属性,基本上我想先整理数据排列属性, 这就是元素 <ul> <li data-arrange="2" data-rdays="100">John</li> <li data-arrange="1" data-rdays="300">Paul</li> <li data-arrange="1" data-rdays="500">Bryan</l

我有一个li元素,有两个数据属性,基本上我想先整理数据排列属性, 这就是元素

 <ul>
        <li data-arrange="2" data-rdays="100">John</li>
        <li data-arrange="1" data-rdays="300">Paul</li>
        <li data-arrange="1" data-rdays="500">Bryan</li>
        <li data-arrange="3" data-rdays="240">Mark</li>
        <li data-arrange="3" data-rdays="500">Victor</li>
        <li data-arrange="4" data-rdays="200">Tess</li>
    </ul>
然后,我想根据data arrange属性排列,使用data rdays属性从高到低对其进行排序,这样看起来就像这样

1 500
1 300
2 100
3 500
3 240
4 200
结果应该是这样

Bryan
Paul
John
Victor
Mark
Tess
这就是我迄今为止所尝试的:

function sort_li(a, b){
        return ($(b).data('arrange')) < ($(a).data('arrange')) ? 1 : -1; 

  /* Other return staments that I've tried
      return ($(a).data('rdays') && $(b).data('arrange')) < ($(b).data('rdays') 
      && $(a).data('arrange')) ? 1 : -1;     
     return new Date($(a).data("date")) - new Date($(b).data("date")); */

     }   
有没有办法我可以做到这一点?多谢各位

您可以首先对排列数据进行排序,对于具有相同排列数据的数据,可以使用arraysort对rdays数据进行排序

$function{ $ul li.sorta,b=>{ 返回$a.data'arrange'-$b.data'arrange'| |$b.data'rdays'-$a.data'rdays'; }.附于“ul”之后; }; 约翰 保罗 布莱恩 做记号 胜利者 苔丝
这应该首先按升序在“排列”属性上排序,然后按降序在“关系日”属性上排序

function sort_li(a, b) {
    const arrangeA = +($(a).data('arrange');
    const arrangeB = +$(b).data('arrange');

    if (arrangeA !== arrangeB) {
        // sort arrange in ascending order
        return arrangeA < arrangeB ? -1 : 1;
    }

    const rdaysA = +($(a).data('rdays');
    const rdaysB = +$(b).data('rdays');

    if (rdaysA !== rdaysB) {
        // sort rdays in descending order
        return rdaysA > rdaysB ? -1 : 1;
    }

    return 0;
}

我从来没有想过用简单的减法排序,但实际上这是非常优雅的。美好的
function sort_li(a, b) {
    const arrangeA = +($(a).data('arrange');
    const arrangeB = +$(b).data('arrange');

    if (arrangeA !== arrangeB) {
        // sort arrange in ascending order
        return arrangeA < arrangeB ? -1 : 1;
    }

    const rdaysA = +($(a).data('rdays');
    const rdaysB = +$(b).data('rdays');

    if (rdaysA !== rdaysB) {
        // sort rdays in descending order
        return rdaysA > rdaysB ? -1 : 1;
    }

    return 0;
}