我的任务是实现getSpeedStatistic
函数,该函数接受testResults
数组并返回统计数据作为包含3个数字的数组:
第一个是最小值。第二个是最高的值。最后一个是平均值,四舍五入。
我的函数:
function getSpeedStatistic(testResults) {
let min = testResults[0];
let max = testResults[0];
let sum = 0;
let average = 0;
for(const number of testResults){
if(number > max){
max = number;
};
if(number < min){
min = number;
};
sum += number;
average += Math.round(sum / testResults.length);
};
return [min, max, average];
};
它适用于最低和最高值,但它不返回正确的平均值,我似乎也找不到结果的模式,它似乎给了我随机数,我不明白这个问题。
例如:
当输入为[5, 0, 8, 1]
时,它应该返回[0, 8, 3]
-但它返回[0,8,9]
;
当输入为[1, 2, 2, 3, 3, 3, 3, 18]
时应该返回[1, 18, 4]
-但它返回[1,18,11]
。
应该返回[1, 9.2, 5]
当输入是[4.5, 6.7, 9.2, 1]
-但它返回[1,9.2,14]
请帮忙!
你可以试试下面的代码:
function getSpeedStatistic(testResults) {
let lowest = testResults[0]
let highest = testResults[0]
let sum = 0
testResults.forEach (num => {
if (num < lowest){
lowest = num
}
else if (num > highest){
highest = num
}
sum += num
})
return [lowest, highest, Math.floor(sum/testResults.length)]
};
console.log(getSpeedStatistic([5, 0, 8, 1])) // Example
在forEach
循环中,每次我们检查值是否小于lowest
变量,如果是,我们等于新数字,这个过程与定义最高数字相同,但我们检查number是否大于highest
变量。
每次我们在sum
变量中对循环中的数字求和,当我们想要输出结果时,我们只需将其除以数组的长度(平均值),然后取整。
将平均值放在for循环的外边和后面
function getSpeedStatistic(testResults) {
let min = testResults[0];
let max = testResults[0];
let sum = 0;
let average = 0;
for(const number of testResults){
if(number > max){
max = number;
};
if(number < min){
min = number;
};
sum += number;
};
average += Math.round(sum / testResults.length);
return [min, max, average];
};