函数调用循环,其参数更新;避免崩溃浏览器

时间:2012-06-27 15:19:42

标签: javascript optimization for-loop crash function-calls

以下是计算给定数组的所有可能组合的函数:

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]]

我有一个嵌套的for循环,它修改了12个对象的数组副本(拼接某些元素,取决于循环的迭代),然后将它用作组合函数的参数并存储数组的某些元素返回。

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返回信息:“此页面上的脚本可能正忙,或者它可能已停止响应。您可以立即停止脚本,在调试器中打开脚本,或让脚本继续。”)断点始终是组合起作用的部分。

因为数组参数在每次迭代中都不同,所以我无法将组合函数调用分配给变量来优化代码。是否有更有效的写作方式?

0 个答案:

没有答案