8.js基礎(chǔ)--高階函數(shù)

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}
})

obj

實際上是遍歷數(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? ? // 降序
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容