1

以下は、指定された配列の可能なすべての組み合わせを計算する関数です。

function combinations(arr, k) {
   var i, subI, sub, combinationsArray = [], next;
   for (i = 0; i < arr.length; i++) {
       if (k === 1) {
           combinationsArray.push([arr[i]]);
       } else {
           sub = combinations(arr.slice(i + 1, arr.length), k - 1);
           for (subI = 0; subI < sub.length; subI++) {
               next = sub[subI];
               next.unshift(arr[i]);
               combinationsArray.push(next);
           }
       }
   }
   return combinationsArray;
};

例えば:

 combinations([1,2,3],2);

戻り値:

[[1,2],[1,3],[2,3]]

組み合わせ関数のパラメーターとして使用し、返された配列の特定の要素を格納する前に、12 個のオブジェクトの配列のコピーを変更するネストされた for ループがあります (ループの反復に応じて、特定の要素を接合します)。

var resultArray = [];
var paramArray = [obj1,obj2,obj3,obj4,obj5,obj6,obj7,obj8,obj9,obj10,obj11,obj12];
for(i=0;i<length1;i++){
  for(n=0;n<length2;n++){
    paramArray.splice(...);//modifying array
    resultArray[n] = combinations(paramArray,2)[i].slice();//storing an element, there are multiples of each element in the resultArray obviously
  }
}

上記のタイプのコードでブラウザーがクラッシュします (firefox は次のメッセージを返します: 「このページのスクリプトがビジーであるか、応答を停止している可能性があります。今すぐスクリプトを停止するか、デバッガーでスクリプトを開くか、スクリプトをそのままにしてください。 continue.") ブレークポイントは常に、呼び出される組み合わせ関数の部分です。

配列パラメーターは反復ごとに異なるため、組み合わせ関数呼び出しを変数に割り当ててコードを最適化することはできません。これを書くより効率的な方法はありますか?

4

0 に答える 0