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}
})
实际上是遍历数组中的每一个元素,再执行相应的操作。
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 // 降序
}