gpt4 book ai didi

javascript - 查找嵌套数组中的最高值,然后记录该对(数字和字符串)

转载 作者:行者123 更新时间:2023-12-02 21:56:24 25 4
gpt4 key购买 nike

我正在 Udemy 上学习 JavaScript 类(class),虽然我已经使用基本的 if/else if/else 代码块解决了这一挑战,但我正在尝试以更复杂的方式来完成它。

挑战是计算 3 名球员在 3 场篮球比赛中的得分,找出每场比赛的平均值,然后确定谁的平均得分最高。这是我所拥有的:

const johnTeamScores = [89, 120, 103];
const mikeTeamScores = [116, 94, 123];
const maryTeamScores = [97, 134, 108];

function getAverageScore(array, player) {
let total = 0;

for (let i = 0; i < array.length; i++) {
total += array[i];
}

const average = total / array.length;
console.log(`The average score for ${player}'s team is: ${average}`);

const playerName = (arguments[1]); // Get passed in player name
console.log(playerName);

return [average, playerName];
}

const johnTeamAverage = getAverageScore(johnTeamScores, 'John');
const mikeTeamAverage = getAverageScore(mikeTeamScores, 'Mike');
const maryTeamAverage = getAverageScore(maryTeamScores, 'Mary');

const finalArray = [];
finalArray.push(johnTeamAverage, mikeTeamAverage, maryTeamAverage);
console.log(finalArray);

finalArray 的控制台中,我看到这个:

enter image description here

我在 Stack Overflow 上找到了这个代码块,它帮助我找到了获胜的对:

const winingPair = finalArray.reduce((max, arr) => {
return max[0] >= arr[0] ? max : arr;
});

所以当我记录这个时:

console.log(`The highest average score was ${winingPair[0]}, which was done by ${winingPair[1]}'s team.`);

我得到正确的说法The highest average score was 113, which was done by Mary's team.

太棒了!我的问题是关于reduce方法如何找到这个结果的。我仍在学习这些高阶数组方法,所以我不想简单地复制并粘贴它并走开。我想了解这里发生了什么。因此,如果有人愿意用简单的英语简要解释如何获得此结果,那将是非常有帮助和赞赏的。我知道这是使用三元运算符,但它如何使用它让我有点困惑。谢谢!

此外,我知道这并不能解释平均分数的平局,我只是想找到最高的。

最佳答案

您可以使用reduce方法。 reduce 方法将计算所有总和,然后将该总和除以数组的length:

const getAverage = (arr) => {
return arr.reduce((a, c)=> a+=c, 0) / arr.length;
}

整个示例可能如下所示:

const johnTeamScores = [89, 120, 103];
const mikeTeamScores = [116, 94, 123];
const maryTeamScores = [97, 134, 108];

const getAverage = (arr, name) => {
return [(arr.reduce((a, c)=> a+=c, 0) / arr.length), name];
}

const allPlayers = [getAverage(johnTeamScores, 'John'),
getAverage(mikeTeamScores, 'Mike'), getAverage(maryTeamScores, 'Mary')];

const getMax = (arr) => {
return arr.reduce((max, arr)=> max[0] >= arr[0] ? max : arr);
}

console.log(getMax(allPlayers))

这段代码是如何工作的?

const winingPair = finalArray.reduce((max, arr) => {
return max[0] >= arr[0] ? max : arr;
});

reduce 方法的签名如下所示:

arr.reduce(callback( accumulator, currentValue[, index[, array]] )[, initialValue])

但是,您的签名如下所示:

 arr.reduce(callback( accumulator, currentValue))
  • 所以我们看到签名中没有初始值。因此,如果没有提供 initialValuethe first element in the array will be used and skipped
  • reduce 的工作方式类似于一个简单的循环,它迭代数组元素,但在我们的例子中 reduce 返回具有更大值的值。这段代码如何返回更大的值?此代码进行比较并返回更大的值: return max[0] >= arr[0] ?最大值:arr;

调试起来更好,越多越清晰。

关于javascript - 查找嵌套数组中的最高值,然后记录该对(数字和字符串),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59999413/

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