Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
第二次单击时反向排序-Javascript_Javascript_Json_Sorting_Click_Reverse - Fatal编程技术网

第二次单击时反向排序-Javascript

第二次单击时反向排序-Javascript,javascript,json,sorting,click,reverse,Javascript,Json,Sorting,Click,Reverse,我有一个函数,在单击链接后对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)); } 函数sortArch(a,b){ x=eval(“a.”+s

我有一个函数,在单击链接后对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));
}
函数sortArch(a,b){
x=eval(“a.”+sort_type).toLowerCase();
y=eval(“b.”+sort_type).toLowerCase();
回报率((xy)?1:0);
}
当我单击同一按钮时,我希望该函数反向排序。倒车很容易:

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();
回报率((xy)?-1:0);
我的问题是让函数知道它需要以哪种方式排序。我曾想过使用布尔标志,但我似乎想不出任何有效的方法。我只是在寻找一种方法来跟踪它的排序方式,然后如果单击按钮,它就会返回第二个代码段。
提前感谢

建议您使用布尔标志:

function sort(reverse){
  if(reverse){
    //reverse sort code
  }else{
    //normal sort code
  }
}

bottonElement.onclick = function(){sort(true);}; //or use addEventHandler

这还允许使用
sort()
cass,它会自动执行正常排序,因为
undefined
是“falsy”。

建议您使用布尔标志:

function sort(reverse){
  if(reverse){
    //reverse sort code
  }else{
    //normal sort code
  }
}

bottonElement.onclick = function(){sort(true);}; //or use addEventHandler

这还允许使用
sort()
cass,它会自动执行正常排序,因为
undefined
是“falsy”。

您可以执行以下操作:

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
函数mySort(desc){
var mod=描述?-1:1;
返回函数(a,b){
var lca=a[sort_type].toLowerCase(),
lcb=b[sort_type].toLowerCase();
返回lca>lcb-1*mod:lca

顺便说一句:在不需要的时候尽量不要使用eval,它既慢又乱

您可以这样做:

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
函数mySort(desc){
var mod=描述?-1:1;
返回函数(a,b){
var lca=a[sort_type].toLowerCase(),
lcb=b[sort_type].toLowerCase();
返回lca>lcb-1*mod:lca
顺便说一句:在不需要的时候尽量不要使用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 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));

干杯

您能否提供更多有关排序发生时间与单击按钮时间的详细信息?为什么使用
eval()
?什么是
a
b
sort\u type
?首先,您需要将
eval(“a.”+sort\u type)
替换为
a[sort\u type]
(与
b
相同)Joel:我在上面做了编辑,排序在onclick期间进行;费利克斯:还有,我会调查评估是否必要;ThiefMaster:感谢您的更改,我现在正在切换。您能否提供更多有关排序发生时间与单击按钮时间的详细信息?为什么使用
eval()
?什么是
a
b
sort\u type
?首先,您需要将
eval(“a.”+sort\u type)
替换为
a[sort\u type]
(与
b
相同)Joel:我在上面做了编辑,排序在onclick期间进行;费利克斯:还有,我会调查评估是否必要;主人:谢谢你的改变,我现在正在改变