我有一个对数组进行排序的函数,我有自定义排序函数。像这样:
function SortTheArray() {
function SortCriteria1Asc(a, b) { ... }
function SortCriteria1Dsc(a, b) { ... }
function SortCriteria2Asc(a, b) { ... }
function SortCriteria1Asc(a, b) { ... }
var CustomSort;
switch (SomeVar) {
case 1:
CustomSort = SortCriteria1Asc;
break;
case 2:
CustomSort = SortCriteria1Dsc;
break;
case ....
}
SomeDataArray.sort(CustomSort);
}
是否可以删除switch
语句并说CustomSort
函数只是等于第n个嵌套函数?
感谢您的建议。
答案 0 :(得分:4)
不要给出函数名称,将它们存储在数组中。
var functions = [
function (a,b) { ... },
function (a,b) { ... },
function (a,b) { ... }
];
然后只是:
SomeDataArray.sort(functions[SomeVar]);
...但数字索引的函数标识符听起来不是一个好主意。你可能最好使用一个对象而不是数组并给它们描述性的名称。
答案 1 :(得分:3)
为什么不在由要切换的变量索引的对象中定义内部函数?
function SortTheArray(someVar){
var sorters = {
CriteriaA: function(array){ ... };
};
return sorters[someVar];
};
答案 2 :(得分:1)
您可以直接在数组中构建函数:
function SortTheArray() {
var functions = [];
functions.push(function(a,b) { ... });
然后你可以执行functions[i](a,b)
。