简体   繁体   English

Javascript-从数组返回最大数

[英]Javascript - Return Biggest number from array

I have an array with objects. 我有一个对象数组。 like this : 像这样 :

var arr = [{name: "Matt",age: 24 ,grades: [100,100,100,100]}

In my code I have 5 objects like these, all with random names/age/grades. 在我的代码中,我有5个类似这样的对象,它们的名称/年龄/等级都是随机的。 I want to return the object with the biggest average grades . 我想归还平均成绩最高的对象 Here is my code : 这是我的代码:

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);

That's it. 而已。 I just want to return to console.log the object with the biggest average grades. 我只想返回console.log,获得平均成绩最高的对象。 can some1 help me please? 有人可以帮我吗? or atleast give me an idea 或至少给我一个主意

The inner loop is unnecessary. 内部循环是不必要的。

 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) 

The logic can be ahem further reduced: 该逻辑可以进一步减小啊哈

 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