1.高階函數(shù)(Higher-order function)
一個函數(shù)接受另一個函數(shù)作為參數(shù),那么這種函數(shù)就稱之為高階函數(shù)。
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中的,我們調(diào)用Array的map()方法,傳入我們自己的函數(shù),就得到了一個新的Array作為結(jié)果。
function pow(x){
? ?return x * x;
}
var arr = [1,2,3,4];
arr.map(pow); ?//[1,4,9,16]
把f(x)作用在Array的每一個元素并把結(jié)果生成一個新的Array。map()抽象了運算規(guī)則。
var arr = [1,2,3];
arr.map(String); ?//['1','2','3']
利用map將數(shù)組轉(zhuǎn)化為object?
var arr = [ 1 , 2 , 3 , 4 ]
var obj = arr.map(function(item){
? ? ? return {value: item,label: item}
})

實際上是遍歷數(shù)組中的每一個元素,再執(zhí)行相應(yīng)的操作。
3.reduce()
Array的reduce()把一個函數(shù)作用在這個Array的[x1,x2,x3,...]上,reduce()把結(jié)果繼續(xù)和序列的下一個元素做累積計算。
[x1,x2,x3,x4].reduce(f) =f(f(f(x1,x2),x3),x4)?
var arr = [1,2,3,4];
arr.reduce(function(x1,x2){ ? ?//匿名函數(shù)
? ? ? ? return x1*x2;
});
4.filter()
filter()用于把a(bǔ)rray中的某些元素過濾掉,然后返回剩下的元素。
filter()把傳入的函數(shù)作用到每個元素上,然后根據(jù)返回值是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)以及所有的行結(jié)束符(LF,CR)
var ?str = ' ?bac ?';
console.log(str.trim()); ? //bac
console.log(str);// ?bac ? (有空格) ? ---不改變原字符串
去除數(shù)組中的空字符串
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()方法用于對數(shù)組進(jìn)行排序,排序的方法不符合常規(guī):(默認(rèn)把所有的元素先轉(zhuǎn)換成String再按照ASCII碼排序)
var arr = [1,2,12,01];
arr.sort(); //[1,1,12,2]
數(shù)組去重:
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()方法排序的不合常理,我們可以自己定義排序規(guī)則,然后傳入作為sort()方法的參數(shù)。
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] ? ?--- 直接修改原數(shù)組
function compare(x,y){
? ? return x-y;? ? ? ? ? ? //升序? ? ? ? ? y-x? ? // 降序
}