我有涉及用於計算給定陣列的所有可能的組合的以下功能的程序:高效的Javascript函數的組合,不崩潰瀏覽器
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個對象,從該數組返回所有可能的兩個組合。有66種可能的組合。在我的程序中,我需要檢查由此函數返回的數組對象元素的屬性值,比較它們,在它們上運行條件等。 但是,當我調用使用組合函數的函數時,瀏覽器崩潰(firefox會返回消息:「這個頁面上的腳本可能很忙,或者它可能已經停止了響應,現在可以停止腳本,在調試器中打開腳本,或者讓腳本繼續。」)它總是一個上述組合函數的一部分被稱爲它崩潰。
我發現這個:http://www.nczonline.net/blog/2009/01/13/speed-up-your-javascript-part-1/ 這意味着是提高重複調用函數(例如在組合函數中)的代碼的效率的好方法。
如何將組合函數與來自ncsonline的方法有效地結合起來,以阻止瀏覽器崩潰?
我想使用setTimeout方法,你不得不將它應用到組合函數本身,而是應用到任何正在調用組合函數的循環中。一次生產66種組合應該不是那麼緊張。但網絡工作者可能是任何支持他們的瀏覽器的方式。 –