8.js基础--高阶函数

1.高阶函数(Higher-order function)

一个函数接受另一个函数作为参数,那么这种函数就称之为高阶函数。

function add(x,y,f){
 return f(x) + f(y)    ==> Math.abs(x) + Math.abs(y)
}
add(-1,2,Math.abs);

2.map()

map()方法是定义在js的array中的,我们调用Array的map()方法,传入我们自己的函数,就得到了一个新的Array作为结果。

function pow(x){
   return x * x;
}
var arr = [1,2,3,4];
arr.map(pow);  //[1,4,9,16]

把f(x)作用在Array的每一个元素并把结果生成一个新的Array。map()抽象了运算规则。

var arr = [1,2,3];
arr.map(String);  //['1','2','3']

利用map将数组转化为object 

var arr = [ 1 , 2 , 3 , 4 ]
var obj = arr.map(function(item){
      return {value: item,label: item}
})

8.js基础--高阶函数_第1张图片
obj

实际上是遍历数组中的每一个元素,再执行相应的操作。

3.reduce()

Array的reduce()把一个函数作用在这个Array的[x1,x2,x3,...]上,reduce()把结果继续和序列的下一个元素做累积计算。

[x1,x2,x3,x4].reduce(f) =f(f(f(x1,x2),x3),x4) 

var arr = [1,2,3,4];
arr.reduce(function(x1,x2){    //匿名函数
        return x1*x2;
});

4.filter()

filter()用于把array中的某些元素过滤掉,然后返回剩下的元素。

filter()把传入的函数作用到每个元素上,然后根据返回值是true还是false决定保留还是丢弃。

var arr = [1,2,3,4];
var arr1 = arr.filter(function(x){
      return x % 2 == 0;
});
arr1;   // [2,4]

trim():方法会删除一个字符串两端的空白字符串。在这个字符串里的所有空格字符(space,tab,no-breakspace)以及所有的行结束符(LF,CR)

var  str = '  bac  ';
console.log(str.trim());   //bac
console.log(str);//  bac   (有空格)   ---不改变原字符串

去除数组中的空字符串

var arr = [1,2,' ',null,undefined,'c'];
var r = arr.filter(function(s){
   return s&&s.trim()   
});
console.log(r);   //   [1,2,'c']

5.sort()

sort()方法用于对数组进行排序,排序的方法不符合常规:(默认把所有的元素先转换成String再按照ASCII码排序)

var arr = [1,2,12,01];
arr.sort(); //[1,1,12,2]

数组去重:

var arr = [1,2,1,3,4];
var a = arr.filter(function(element,index,array){
        return arr.indexOf(element) == index;
});
a; //[1,2,3,4]

鉴于sort()方法排序的不合常理,我们可以自己定义排序规则,然后传入作为sort()方法的参数。

var arr = [2,5,1,7,3];
console.log(arr.sort(compare));    // [1,2,3,5,7]
console.log(arr);      // [1,2,3,5,7]    --- 直接修改原数组
function compare(x,y){
    return x-y;            //升序          y-x    // 降序
}

你可能感兴趣的:(8.js基础--高阶函数)