0

特定の配列の可能なすべての組み合わせを計算するための次の関数を含むプログラムがあります。

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 個のオブジェクトの配列パラメーターを使用して、その配列から 2 つの可能なすべての組み合わせを返すために、これをよく使用します。66通りの組み合わせが可能です。私のプログラムでは、この関数によって返される配列のオブジェクト要素のプロパティ値を何度もチェックし、それらを比較したり、それらに対して条件を実行したりする必要があります。しかし、このような組み合わせ関数を使用する関数を呼び出すと、ブラウザーがクラッシュします ( firefox は次のメッセージを返します。上記の組み合わせ関数が呼び出されてクラッシュします。

私はこれを見つけました : http://www.nczonline.net/blog/2009/01/13/speed-up-your-javascript-part-1/繰り返し機能します (組み合わせ機能など)。

組み合わせ関数を ncsonline のメソッドと効果的に統合して、ブラウザーのクラッシュを防ぐにはどうすればよいですか?

4

2 に答える 2

2

これは、別のスレッドでコードを実行するWeb ワーカーを使用する場合に適しています。

このようにして、集中的な計算で UI スレッド (これが現在表示されているもの) をロックすることはありません。

于 2012-06-14T17:10:01.640 に答える
0

なぜアレイを構築するのですか?すべての組み合わせを繰り返して、ループ内で作業を行うことができますか?これにより、ロジックが大幅に高速化され、ブラウザが課す制限に適合します。

于 2012-06-14T17:37:16.050 に答える