0

我有一个对数组进行排序的函数,在其中,我有自定义排序函数。像这样的东西:

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 个嵌套函数?

感谢您的建议。

4

3 回答 3

4

不要给出函数名称,将它们存储在数组中。

var functions = [
  function (a,b) { ... },
  function (a,b) { ... },
  function (a,b) { ... }
];

然后只是:

SomeDataArray.sort(functions[SomeVar]);

…但是数字索引的函数标识符听起来不是一个好主意。使用对象而不是数组并给它们起描述性名称可能会更好。

于 2012-07-09T15:14:59.807 回答
3

你为什么不在一个由你切换的变量索引的对象中定义内部函数?

function SortTheArray(someVar){

   var sorters = {
       CriteriaA: function(array){ ... };
   };
   return sorters[someVar];
};
于 2012-07-09T15:15:57.037 回答
1

您可以直接在数组中构建函数:

function SortTheArray() {
   var functions = [];
   functions.push(function(a,b) { ... });

然后就可以执行了functions[i](a,b)

于 2012-07-09T15:14:52.463 回答