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 に答える