我有一个函数,可以在单击链接后对 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));
我的问题是让函数知道它需要哪种排序方式。我正在考虑使用 bool 标志,但我似乎想不出任何有效的方法。我只是在寻找一种方法来跟踪它的排序方式,然后如果单击该按钮,它将使用第二个代码片段。 提前致谢!
最佳答案
你可以这样做:
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,它既慢又乱
关于javascript - 第二次单击时反向排序 - Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5676974/