高效的Javascript组合函数,不会使浏览器崩溃
Efficient Javascript Combinations function that doesn't crash browser
>我有一个程序,它涉及以下函数,用于计算给定数组的所有可能组合:
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 的方法集成以阻止浏览器崩溃?
这是一个很好的候选者,它使用 Web worker 在单独的线程上运行您的代码。
这样,您就不会使用密集计算锁定 UI 线程(这就是您现在看到的)。
为什么要构建数组?您能否遍历所有组合并在循环内完成工作。这应该会大大加快您的逻辑速度,并使您适应浏览器施加的限制。
相关文章:
- 为什么这会造成一个无休止的循环并使我的浏览器崩溃
- javascript audio currentTime使一些浏览器崩溃
- 在浏览器崩溃之前检测到内存耗尽
- 输入输入前浏览器崩溃
- three.js内存泄漏/浏览器崩溃
- Ajax 请求仪表板页面上的浏览器崩溃
- set超时在“while”内会导致浏览器崩溃.我怎样才能避免它
- 设置设置间隔函数正在运行并导致浏览器崩溃
- 高效的Javascript组合函数,不会使浏览器崩溃
- 我的脚本使浏览器崩溃
- SlickGrid在选择大范围的行时使浏览器崩溃
- setInterval 在运行用户脚本时使我的浏览器崩溃
- 添加依赖项后浏览器崩溃
- Javascript/Jquery代码使我的浏览器崩溃
- 无限滚动会导致浏览器崩溃吗?
- 为什么这 while 循环会使浏览器崩溃
- 设置间隔导致浏览器崩溃
- JavaScript函数使我的浏览器崩溃
- 旧的JavaScript函数使浏览器崩溃
- 如何使用 IndexedDB 制作一个很长的字符串而不会使浏览器崩溃