gpt4 book ai didi

javascript - JS 超出最大调用堆栈

转载 作者:行者123 更新时间:2023-12-01 02:53:13 25 4
gpt4 key购买 nike

我有这个:

var Utilities = (function (array, maxN) {

function generateRandomNumber(array, maxN) {
let randomN = Math.floor(Math.random() * maxN) + 0;

if(!array.includes(randomN)) {
console.log(maxN);
if(array.length == maxN) {
console.log('max reached');
array.length = 0;
return;
}
else {
array.push(randomN);
}

}
else {
randomN = generateRandomNumber(array, maxN);
}
return randomN;
}

return {
generateRandomNumber: generateRandomNumber
};

})();

export default Utilities;

点击时的使用方式如下:

function getRandomNumber(arr) {
let randomN = Utilities.generateRandomNumber(arr, 5);
return randomN;
}

但是,当长度达到 5 时,我得到:(尽管我正在清除数组)我正在尝试生成一个随机数,但我不想重复它,因此我将其存储在一个数组中以检查它是否已生成。然而我遇到的问题是(即使我在长度等于最大数后清除数组)我收到附加的“错误”

enter image description here

最佳答案

however, when the length of 5 is reached I get a stack overflow, although I am clearing the array

不,你没有清除数组 - 只有当你找到一个新的随机数(不包含在数组中)时才会发生这种情况,当然当数组已满时这种情况永远不会发生。您需要在开始时进行长度检查:

function generateRandomNumber(array, maxN) {
if (array.length == maxN) {
console.log('max reached');
array.length = 0;
return;
}
let randomN = Math.floor(Math.random() * maxN) + 0;
if (!array.includes(randomN)) {
array.push(randomN);
console.log(maxN);
return randomN;
} else {
return generateRandomNumber(array, maxN);
}
}

当然,这种通过试错法生成新随机数的方式一般来说效率较低,而且一次会采取太多步骤 maxN非常大并且 array快满了。如果迭代以递归方式实现,最终会出现堆栈溢出。

关于javascript - JS 超出最大调用堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46850744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com