第二次单击时反向排序-Javascript
我有一个函数,在单击链接后对json数组进行排序(因此使用onclick调用该函数),该函数可以工作并排序:第二次单击时反向排序-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
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期间进行;费利克斯:还有,我会调查评估是否必要;主人:谢谢你的改变,我现在正在改变