javascript - Javascript - 从数组中返回最大的数字
问题描述
我有一个包含对象的数组。像这样 :
var arr = [{name: "Matt",age: 24 ,grades: [100,100,100,100]}
在我的代码中,我有 5 个这样的对象,它们都有随机的名称/年龄/等级。我想返回平均成绩最高的对象。这是我的代码:
var grades = [];
var arr = [{
name: "John",
age: 24,
grades: [100,100,100,100]
}, {
name: "Brock",
age: 23,
grades: [55,65,75,85]
}, {
name: "Matt",
age: 24,
grades: [88,78,65,95]
}, {
name: "Jay",
age: 28,
grades: [32,85,99,99]
}, {
name: "Monica",
age: 25,
grades: [45,63,82,81]
}];
function avg(x) {
var num = 0;
for (var i=0; i<x.length; i++) {
num += x[i]
}
return num / x.length;
}
//Go over the whole array
for (var i=0; i<arr.length; i++) {
for (var x=0; x<arr[i].grades.length; x++) {
var a = avg(arr[i].grades);
/////// What to do next? ^ returns all averages
}
}
console.log(arr);
而已。我只想返回到 console.log 平均成绩最高的对象。有人能帮帮我吗?或者至少给我一个想法
解决方案
内循环是不必要的。
var arr = [{ name: "John", age: 24, grades: [100,100,100,100] }, { name: "Brock", age: 23, grades: [55,65,75,85] }, { name: "Matt", age: 24, grades: [88,78,65,95] }, { name: "Jay", age: 28, grades: [32,85,99,99] }, { name: "Monica", age: 25, grades: [45,63,82,81] }];
function avg(x) {
var num = 0;
for (var i=0; i<x.length; i++) {
num += x[i]
}
return num / x.length;
}
let maxAvg = 0;
let maxAvgObj = null;
for (var i=0; i<arr.length; i++) {
var a = avg(arr[i].grades);
if (a > maxAvg) {
maxAvg = a;
maxAvgObj = arr[i];
}
}
console.log(maxAvg, maxAvgObj)
逻辑可以进一步简化:
const arr = [{ name: "John", age: 24, grades: [100,100,100,100] }, { name: "Brock", age: 23, grades: [55,65,75,85] }, { name: "Matt", age: 24, grades: [88,78,65,95] }, { name: "Jay", age: 28, grades: [32,85,99,99] }, { name: "Monica", age: 25, grades: [45,63,82,81] }];
const [maxAvg, maxAvgObj] = arr.reduce(([currMaxAvg, currMaxAvgObj], obj) => {
const avg = obj.grades.reduce((sum, grade) => sum + grade, 0) / obj.grades.length;
return avg > currMaxAvg ? [avg, obj] : [currMaxAvg, currMaxAvgObj];
}, [[]]);
console.log(maxAvg, maxAvgObj)
推荐阅读
- c# - 自定义模型绑定 - ASP.NET Core
- reactjs - 将 Strapi 和 MongoDB 部署到服务器
- jenkins - 将参数从 KEY=VALUE 属性文件传递到下游 Jenkins 作业
- bash - 无法理解反引号内反斜杠的非明显使用
- java - 在 Spring Boot 的后台运行线程并能够自动装配
- docusignapi - 调用 EnvelopesApi#update_document_tabs 返回错误
- android - ArrayList、Map.Entry 的问题
) 入口 - visual-studio - MFC:如何修复“待办事项”
(32位)”在任务管理器输出? - python - 如何将 str.format() 与带有一些乳胶的降价文件一起使用
- python - 以宽格式制作 pandas df 并将值取消连接到不同的列