js 查找对象数据中某属性的最大值

var list=[{id:1,name:'张三',score:123},{id:2,name:'李四',score:135}]

找出数组list中最好的成绩

var max = Math.max.apply(Math, this.list.map(i => {return i.score}));
结果是135
 
找出数组中list中成绩最差的成绩
var min= Math.min.apply(Math, this.list.map(i => {return i.score}));
结果是123
 
注:
原本的比较函数写法: Math.min(param1,param2,param3...);
Math.min不能直接收数组值,就借助apply()方法
apply(thisArg, [argsArray])
第一个参数用来改变被调用函数的执行上下文(this),它们的第一个参数thisArg 是个对象,即作为被调用函数内的this,多数的时候你传啥函数内就是啥
第二个参数为数组。apply会将数组的元素一个一个的传递给被调用函数
 
以 Math.min.apply(Math,this.list.map(i => {return i.score}))为例
第一个参数,为Math表示min()内部执行上下文this变成了Math
假如min()函数内部调用了this,此时this就是Math
第二个参数,为score的数组[132,135],apply会将数组[132,135]中的值一个一个的传入min()函数中
注:
1.min()和max()内部是没有调用this的所以对min()和max()而言第一个参数传啥都可以,如上的第一个参数可以传null/undefined等
2.传入null 或者undefined 时,将是JS执行环境的全局变量,浏览器中是window ,其他环境(如node) 则是global.
 
针对需要上下文this指向的如下
  add(a){
     return this+a;
    }
    mutilAdd(){
        //将add中的上下文this变成了1,参数a 为2
      var res= this.add.apply(1,2)
    }

res的结果就为3

关于apply()参考

 

posted @ 2021-10-08 14:17  流年sugar  阅读(2423)  评论(0编辑  收藏  举报