二次点击反向排序-Javascript

|| 我有一个函数,可在单击链接后对json数组进行排序(因此,该函数使用onclick调用),并且该函数可以工作并且可以排序:
function sortArch(a,b) {
x = eval(\"a.\" + sort_type).toLowerCase();  
y = eval(\"b.\" + sort_type).toLowerCase();  
return ((x < y) ? -1 : ((x > y) ? 1 : 0));
}
当我单击相同的按钮时,我希望函数进行反向排序。反转很容易:
x = eval(\"a.\" + sort_type).toLowerCase();  
y = eval(\"b.\" + sort_type).toLowerCase();  
return ((x < y) ? 1 : ((x > y) ? -1 : 0));
我的问题是让函数知道需要哪种排序方式。我当时在考虑使用布尔标志,但似乎无法提出任何可行的方法。我只是在寻找一种方法来跟踪它的排序方式,然后如果单击该按钮,它将使用第二个代码段。      先谢谢了!     
已邀请:
您可以执行以下操作:
function mySort(desc) {
  var mod = desc ? -1 : 1;
  return function(a,b) {
    var lca = a[sort_type].toLowerCase(), 
        lcb = b[sort_type].toLowerCase();
    return lca > lcb ? 1 * mod : lca < lcb -1 * mod : 0;
  }
}

arr.sort(mySort(true)); //sort descending
arr.sort(mySort(false)); //sort ascending
顺便说一句:尽量不要在不需要时使用eval,它既缓慢又混乱     
你几乎已经完成:
function compareFunc(sort_type, ascending) {
    var direction = ascending ? 1 : -1;
    return function(a, b) {
        x = a[sort_type].toLowerCase();
        y = b[sort_type].toLowerCase();

        return direction * x.localeCompare(y);
    }
}
使用示例:
persons = [
    {firstName: \'John\', lastName: \'Foo\'},
    {firstName: \'Bob\', lastName: \'Bar\'}
];


// In your button click events, use compareFunc to generate the right function :
persons.sort(compareFunc(\'firstName\', true));
// or
persons.sort(compareFunc(\'firstName\', false));
// or
persons.sort(compareFunc(\'lastName\', true));
// or
persons.sort(compareFunc(\'lastName\', false));
干杯!     
建议您使用布尔标志的想法:
function sort(reverse){
  if(reverse){
    //reverse sort code
  }else{
    //normal sort code
  }
}

bottonElement.onclick = function(){sort(true);}; //or use addEventHandler
这也允许使用
sort()
cass,由于
undefined
是'falsy \',它会自动进行常规排序。     

要回复问题请先登录注册