首页 > 解决方案 > 在 JavaScript 中无需硬编码即可找到数组的平均值

问题描述

我必须找到以下平均分:

scores = [85, 93, 65, 65, 92, 81, 93];

虽然有人教我如何解决这个问题,但有人告诉我不要硬编码,这对我来说有点问题,因为我是一个完整的初学者。提示是使用我已经尝试使用的 Math.random()。

let scores = [85, 93, 65, 65, 92, 81, 93];
let randDecimal = Math.random();
let randNum = randDecimal * scores.length;
let randIndex = Math.floor(randNum);
randScore = scores[randIndex];
let averageAddition = randScore * scores.length;
let averageLength = scores.length;
let averageScore = averageAddition / averageLength;
console.log("Average:", averageScore);

这会打印出不同的数字,这些数字不是scores 我尝试对其进行硬编码并得到 82 的平均值,但现在我似乎无法再次获得 82。

标签: javascriptarraysmathrandom

解决方案


Math.random()返回一个介于 0 和 1 之间的随机数。在尝试计算数组的平均值时,它对你没有任何好处。

您之前的尝试不起作用,因为它不是计算数组的平均值,而是从数组中获取一个随机项。

let scores = [85, 93, 65, 65, 92, 81, 93];
let randDecimal = Math.random(); //random number from 0-1
let randNum = randDecimal * scores.length;
let randIndex = Math.floor(randNum); //random index
randScore = scores[randIndex]; //get item at random index
let averageAddition = randScore * scores.length; 
let averageLength = scores.length;
let averageScore = averageAddition / averageLength; //cancels out previous operation at line 6
console.log("Average:", averageScore);

要计算平均值,您可以遍历数组并对变量中的值求和,然后将总和除以长度以找到平均值。

let scores = [85, 93, 65, 65, 92, 81, 93];
var sum = 0;
scores.forEach(e => sum += e);
const avg = sum / scores.length;
console.log(avg);

您可以使用以下方法使其更短Array.reduce()

let scores = [85, 93, 65, 65, 92, 81, 93];
const avg = scores.reduce((a, b) => a + b, 0) / scores.length;
console.log(avg);


推荐阅读