Javascript 获取具有最高属性值的对象的最佳方法

Javascript 获取具有最高属性值的对象的最佳方法,javascript,oop,Javascript,Oop,我有以下多维学生对象数组: var students = [ {name: "Jack", age: "NYN", attempts: 3, wrong: 2}, {name: "Phil", age: "NNNY", attempts: 4, wrong: 3}, {name: "Tom", age: "", attempts: 0, wrong: 0}, {name: "Lucy", age: "YYNY", attempts: 4, wrong: 1}, {name: "Ben", age

我有以下多维学生对象数组:

var students = [
{name: "Jack", age: "NYN", attempts: 3, wrong: 2},
{name: "Phil", age: "NNNY", attempts: 4, wrong: 3},
{name: "Tom", age: "", attempts: 0, wrong: 0},
{name: "Lucy", age: "YYNY", attempts: 4, wrong: 1},
{name: "Ben", age: "NYNN", attempts: 4, wrong: 3},
{name: "Hardest", age: "NNN", attempts: 3, wrong: 3}
]
我试图创建一个数组“peopleMostNeedingHelp”,它只包含属性值“错误”最高的学生。所以“peopleMostNeedingHelp”应该只包含Phil、Ben和Harsted的对象。问题是,我这样做的方式还包括不需要的“杰克”,因为他是第一个比较对象

如何创建一个只返回错误答案最多的人的函数

变量s2=杰克:不,菲尔:不,汤姆:露西:不,本:不,最难的:不; 变量s2Arr=s2.split',';//将字符串转换为数组 var s2MdArr=s2Arr.mapfunction{return e.split':';};//转换为MD数组 var=0; fori=0;i=person.error{//problem=第一个实例始终为真 person=s2ArrObj[i];//更新person变量以便比较下一个人 最需要帮助的人; } } } 某物 console.logpeoplemosetneedinghelp 当发现新学员出现更多错误时,您必须重置peopleMostNeedingHelp:

let mostNeedingHelp = [students[0]];

for(const student of students.slice(1)) {
  if(student.errors === mostNeedingHelp[0].errors) {
    mostNeedingHelp.push(student);
  } else if(student.errors >= mostNeedingHelp[0].errors) {
    mostNeedingHelp = [student]; // <<<<
  }
}
这可以用reduce来简化:

const mostNeedingHelp = students.slice(1).reduce((arr, student) => 
 arr[0].errors === student.errors ? arr.concat(student) : arr[0].errors < student.errors ? [student] : arr, [students[0]]);

您可以通过检查错误的属性来减少数组

var students=[{姓名:Jack,年龄:NYN,尝试次数:3,错误:2},{姓名:Phil,年龄:NNNY,尝试次数:4,错误:3},{姓名:Tom,年龄:Tom,尝试次数:0,错误:0},{姓名:Lucy,年龄:YYNY,尝试次数:4,错误:1},{姓名:Ben,年龄:NYN,尝试次数:4,错误:3},{姓名:最难,年龄:NNN,尝试次数:3,错误:3}], topError=students.reducer,o=>{ 如果!r | | o.错误>r[0]。错误{ 返回[o]; } 如果o.Error==r[0]。错误{ r、 普索; } 返回r; },未定义; console.logtopError;
.作为控制台包装{max height:100%!important;top:0;}如果错误的属性值按升序排列,则代码也将失败,如

var students = [
    {name: "Jack", age: "NYN", attempts: 3, wrong: 2},
    {name: "Phil", age: "NNNY", attempts: 4, wrong: 3},
    {name: "Tom", age: "", attempts: 0, wrong: 0},
    {name: "Lucy", age: "YYNY", attempts: 4, wrong: 1},
    {name: "Ben", age: "NYNN", attempts: 4, wrong: 3},
    {name: "Hardest", age: "NNN", attempts: 3, wrong: 3}
    {name: "Mad", age: "NYN", attempts: 3, wrong: 5},
]
结果将包括杰克、菲尔、本、最难和疯狂

一旦找到错误值更大的新用户,您必须放弃以前的结果,请参阅下面的代码段

变量s2=杰克:不,菲尔:不,汤姆:露西:不,本:不,最难的:不; 变量s2Arr=s2.split',';//将字符串转换为数组 var s2MdArr=s2Arr.mapfunction{return e.split':';};//转换为MD数组 var=0; fori=0;i人.错误{ //放弃以前的结果,仅使用一个新人创建新列表 person=s2ArrObj[i]; //更新person变量以便可以比较下一个人 peopleMostNeedingHelp=[个人]; } 否则,如果s2ArrObj[i].error==person.error{ //将此人添加到列表中 person=s2ArrObj[i]; //更新person变量以便可以比较下一个人 最需要帮助的人; } } } 某物
console.logpeoplemosetneedinghelp 实现目标最直接的算法是:

在students数组中查找错误的最大值。 使用过滤器只留下属性错误等于最大值的相关学生。 var students=[{姓名:Jack,年龄:NYN,尝试次数:3,错误次数:2},{姓名:Phil,年龄:NNNY,尝试次数:4,错误次数:3},{姓名:Tom,年龄:Tom,尝试次数:0,错误次数:0},{姓名:Lucy,年龄:YYNY,尝试次数:4,错误次数:1},{姓名:Ben,年龄:NYN,尝试次数:4,错误次数:3},{姓名:最难,年龄:NNN,尝试次数:3}]; //找到最大“错误”值 设maxValue=0; 学生中的小学生{ ifstudent.error>maxValue{ maxValue=student.error; } } //筛选出与最大值不同的“错误”值的学生 让onlyMax=students.filteritem=>item.Error==maxValue;
console.logonlyMax;对不起,我不太熟悉ES6,但是有人能解释一下“r”和“o”代表什么吗?或者链接到我可以阅读的详细文章?谢谢r是累加器,o是数组中的每个对象。请看这里:可能的副本