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

我有一个嵌套的 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返回消息:“此页面上的脚本可能正忙,或者可能已停止响应。您可以现在停止脚本,在调试器中打开脚本,或者让脚本继续。”)断点始终是调用组合函数的部分。

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

4

0 回答 0