繁体   English   中英

Javascript-从数组返回最大数

[英]Javascript - Return Biggest number from array

我有一个对象数组。 像这样 :

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) 

暂无
暂无

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

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