1

我正在尝试从我的数组中生成所有可能的名称组合,productsDeduped然后将生成的组合存储为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   
}

我收到此错误:

          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)

知道如何解决这个问题;我认为是因为请求量很大?

编辑: 我只是看得更深,当我将productNameStrings字符串数组限制为只有 9 个元素时,代码可以正常工作;但如果它在数组中有 10 个或更多字符串,它就会开始给我这个错误!仍然不知道如何修复它。

4

1 回答 1

0

你可以在这里查看。可能,您无法摆脱递归循环。

继续调用自身的递归函数的问题是不可能移动到链中的下一个函数,并且你会吃掉整个堆栈。

防止此错误的最佳方法是仔细检查您的递归函数。

https://airbrake.io/blog/javascript-error-handling/javascript-error-handling-maximum-call-stack-size-exceeded

另一个来源: https ://www.education.io/edpresso/rangeerror-maximum-call-stack-size-exceeded

于 2022-02-16T12:05:49.657 回答