Javascript Node.js RangeError:超出最大调用堆栈大小

Javascript Node.js RangeError:超出最大调用堆栈大小,javascript,arrays,node.js,loops,stack-size,Javascript,Arrays,Node.js,Loops,Stack Size,我正在尝试从数组productsdedeped生成名称的所有可能组合,然后将生成的组合存储为productTags数组。这是我的密码: //function to generate all possible combinations function getCombinations(array) { var i, result = []; for (i = 0; i < array.length; i++) { result.push(

我正在尝试从数组
productsdedeped
生成名称的所有可能组合,然后将生成的组合存储为
productTags
数组。这是我的密码:

//function to generate all possible combinations
function getCombinations(array) {
    var i,
        result = [];
    for (i = 0; i < array.length; i++) {
        result.push(
            array[i],
            ...getCombinations(array.filter((_, j) => i !== j)).map(v => array[i] + " " + v)
        );
    }

    return result;
}

for (var i = 0; i < arrLength; i++) {
    var productNameStrings = getCombinations(productsDeduped[i].tags);

    productsDeduped[i].productTags = productNameStrings   
}
//用于生成所有可能组合的函数
函数组合(数组){
var i,
结果=[];
对于(i=0;ii!==j)).map(v=>array[i]+“”+v)
);
}
返回结果;
}
对于(变量i=0;i
我得到这个错误:

          result.push(
           ^

RangeError: Maximum call stack size exceeded
    at getCombinations (/Users/farhadam/Silobee/Inventory/categories/execute.js:1006:16)
    at Object.<anonymous> (/Users/farhadam/Silobee/Inventory/categories/execute.js:1016:30)
    at Module._compile (internal/modules/cjs/loader.js:1156:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1176:10)
    at Module.load (internal/modules/cjs/loader.js:1000:32)
    at Function.Module._load (internal/modules/cjs/loader.js:899:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
result.push(
^
RangeError:超出了最大调用堆栈大小
在getCombinations(/Users/farhadam/Silobee/Inventory/categories/execute.js:1006:16)
在对象上。(/Users/farhadam/Silobee/Inventory/categories/execute.js:1016:30)
at模块编译(内部/modules/cjs/loader.js:1156:30)
at Object.Module._extensions..js(internal/modules/cjs/loader.js:1176:10)
在Module.load(内部/modules/cjs/loader.js:1000:32)
at Function.Module._load(内部/modules/cjs/loader.js:899:14)
在Function.executeUserEntryPoint[作为runMain](internal/modules/run_main.js:74:12)
你知道我该如何解决这个问题吗?我想这是因为请求量很大吧

编辑:
我只是深入研究了一下,当我将我的
productNameStrings
字符串数组限制为9个元素时,代码工作没有问题;但是如果数组中有10个或更多字符串,它就会开始给我这个错误!仍然不知道如何修复它。

首先,你可以将结果数组声明移出函数,因为每次你记录在函数中,您可以重新创建它。另一种方法是将它作为一个单独的参数传递给函数。我认为高容量不是问题所在,而是调用堆栈的大小,即每个输入形成的递归迭代的数量(我想现在是9)。另一种称为动态规划的解决问题方法在这里会有所帮助,通过记忆以前的结果,您可以减少堆栈大小。我是一个新手;我该怎么做?不知道如何将其作为单独的参数进行编码!?谢谢!我还将结果变量移出了函数,但仍然得到相同的error-虽然我确实希望数组在每次我返回循环时都开始为空,就像在新产品中一样,每次代码调用函数时,运行时都会在堆栈中推送当前代码状态,并在代码返回时将其弹出。这就是为什么会出现“调用堆栈大小超出”错误:堆栈已满,无法继续推送(
getCombinations()
)而不弹出(
return
)。这是递归代码的一个常见问题。你能举例说明输入数组和输出数组是什么样子吗?首先,你可以将结果数组声明移出函数,因为每次你递归到函数中,你都会重新创建它。另一种方法是将它作为一个单独的参数传递给函数。我认为卷不是问题的关键,而是调用堆栈的大小,即每个输入形成多少递归迭代(我现在使用的是9)。另一种称为动态规划的解决问题方法在这里会有所帮助,通过记忆以前的结果,您可以减少堆栈大小。我是一个新手;我该怎么做?不知道如何将其作为单独的参数进行编码!?谢谢!我还将结果变量移出了函数,但仍然得到相同的error-虽然我确实希望数组在每次我返回循环时都开始为空,就像在新产品中一样,每次代码调用函数时,运行时都会在堆栈中推送当前代码状态,并在代码返回时将其弹出。这就是为什么会出现“调用堆栈大小超出”错误:堆栈已满,无法继续推送(
getcombines()
)而不弹出(
return
)。这是递归代码的常见问题。您能举一个输入数组和输出数组的示例吗?