繁体   English   中英

未捕获的类型错误:减少没有初始值的空数组

[英]Uncaught TypeError: Reduce of empty array with no initial value

我正在尝试设计这个非常简单的应用程序,您在其中输入 2 个数字,该应用程序将计算 2 个输入数字之间所有数字的较小公倍数。

function 本身运行良好(从控制台的结果来看); 但是,当我尝试使用事件侦听器链接到 HTML 时,会出现故障。 因此,我假设我在链接到 HTML 时犯了一些错误。

对于某些数字,我的应用程序运行良好,但对于某些数字,出于某种原因,它不起作用(例如,输入 2 和 10、7 和 11 ....等)。 错误说:

Uncaught TypeError: Reduce of empty array with no initial value

这是我的代码。

 const smallNum = document.querySelector('#smallernum') const bigNum = document.querySelector('#biggernum') const button = document.querySelector('button') const result = document.querySelector('#result') button.addEventListener('click', () => { result.value = smallestCommons([smallNum.value, bigNum.value]) }) function smallestCommons(arr) { arr.sort((a,b) => ab) let lowerNum = arr[0] let higherNum = arr[1] let newArr = [] let primeOfArr = [] let shortDivisionArr = []; // Create an array of nums inbetween the two extreme nums for(let i = lowerNum; i <= higherNum; i++) { newArr.push(i) } // Create an array of primes up until largest num for(let i = 1; i <= higherNum; i++) { let flag = 0; for(let j = 2; j < i; j++) { if(i % j === 0) { flag = 1; break; } } if(i > 1 && flag === 0) { primeOfArr.push(i) } } // Short Division for(let i = 0; i < primeOfArr.length; i++) { while(newArr.some((num) => num % primeOfArr[i] === 0)) { for(let j = 0; j < newArr.length; j++) { if(newArr[j] % primeOfArr[i] === 0) { newArr[j] = newArr[j] / primeOfArr[i] } } shortDivisionArr.push(primeOfArr[i]) } } return shortDivisionArr.reduce((a,b) => a*b); }
 <div class="container"> <div id="main"> <div class="title"> <h2>This App Helps You Find The Smallest Common Multiple Of Consecutive Numbers Between 2 Nums.</h3> <p>2 nums inclusive. App for demonstration purpose. Please don't use this to cheat on your homework!</p> </div> <div class="calcs"> <div class="inputnums"> <input id="smallernum" type="text" placeholder="Enter a smaller num"> <input id="biggernum" type="text" placeholder="Enter a bigger num"> </div> <button>Click to calculate!</button> <input id="result" type="text" placeholder="Result is here!"> </div> </div> </div>

我做错了什么,我该如何解决?

问题解决了。 传递给 function 的值(smallNum.value 和 bigNum.value)是字符串。 使用 parseInt() 将它们转换为整数,现在可以使用了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM