for..循环的输出问题- JavaScript



我正在解决一个JavaScript挑战问题查找具有相同数量的除数的数字,并在代码末尾遇到一些麻烦,其中涉及for循环。

问题:

求1和NMax之间所有的数对,它们是diff的数,并且有相同数量的因数。

例如:对于1到50之间的数字,有8个数字具有相同的除数:[[2,3],[14,15],[21,22],[26,27],[33,34],[34,35],[38,39],[44,45]]

在下面的代码中,count_pairsInt(1,50)将返回8,但count_pairsInt (3,100)返回TypeError: Cannot read properties of undefined (reading '1')

我几乎可以肯定,最后一个for循环出了问题,但我不太清楚是什么问题。有人能帮我一下吗?

function countPairsInt(diff, nMax) {
const numbers = [];
for (let i=1; i<=nMax; i++) {
numbers.push(i);
}

// divisors loops over each number passed in and returns the number of divisors for that number
function divisors(num) {
let divs = [];
for (let i=1; i<=num; i++) {
if (num % i === 0) divs.push(i);
}
return divs;
}

// create an array of arrays, each subarray contains the number and it's number of divisors by passing map over the numbers array.
const numsAndDivs = numbers.map(x=> [x, divisors(x).length]);
let equalDivs = 0;
for (let i=1; i<numsAndDivs.length-1; i++) { 
if (numsAndDivs[i][1] === numsAndDivs[i+diff][1] ){
equalDivs++;
}
}
return equalDivs
}

countPairsInt(1, 50); // returns 8
countPairsInt(3, 100) // should return 7

您忘记添加一个简单的检查,即i + diff必须小于numsanddiv .length。在你的例子中,它得到的是100而numsanddiv中没有索引为100的数组。因此出现了错误。

if (i+ diff < numsAndDivs.length && numsAndDivs[i][1] === numsAndDivs[i+diff][1] ){
equalDivs++;
}

最新更新