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