JS高階函數--------map、reduce、filter


一、filter

filter用於對數組進行過濾。
它創建一個新數組,新數組中的元素是通過檢查指定數組中符合條件的所有元素。

注意: filter() 不會對空數組進行檢測。

注意: filter() 不會改變原始數組。

1.語法

 
        
Array.filter(function(currentValue, indedx, arr), thisValue)

第一個參數是函數

這個回調函數的返回值是一個boolean值

當檢查元素符合過濾條件的時候會返回true,函數內部會自動將這個元素加入新數組中

當不符合條件時會返回false,函數內部會過濾掉這個元素

例子1:返回數組中小於100的元素

const nums = [10, 20, 50, 101, 222,40] let newNums = nums.filter(function (n) { return n < 100 }) console.log(newNums); //[10, 20, 50, 40]

例子2篩選空格

const arr = ['0',1,2,3,4,"",5,1,4,'0',""]; let arr_filter = arr.filter(function(x){ return x;/* 篩選空格 */ }) console.log(arr_filter)

例子3:去除Array的重復元素

const arr_repeat = ['A', 'B', 'A', 'B', 'B', 'C', 'A', 'D', 'C'] let arr_filter = arr_repeat.filter(function (el, index, self) { // console.log(self.indexOf(el)) // console.log('index',index)
    return self.indexOf(el) == index })
console.log(arr_filter) //["A", "B", "C", "D"]

去除重復元素依靠的是indexOf總是返回某個元素第一次出現的位置,后續的重復元素位置index與indexOf返回的位置不相等,因此被filter濾掉了。

二、map

map() 方法:原數組中的每個元素調用一個指定方法后,返回返回值組成的新數組。

const nums = [2, 4, 6, 8, 10] newNums = nums.map(function (n) { return n*2 }) console.log(newNums)

三、reduce

reduce函數對數組中的所有內容進行匯總。

reduce()把一個函數作用在這個Array[x1, x2, x3...]上,這個函數必須接收兩個參數,reduce()把結果繼續和序列的下一個元素做累積計算,其效果就是:

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

語法

arr.reduce(callback,[initialValue])

第一個參數是回調函數

這個回調函數可以接收四個參數

 

previousValue (第一項的值或者上一次疊加的結果值,或者是提供的初始值(initialValue))
currentValue (數組中當前被處理的元素)
index (當前元素在數組中的索引)
array (數組本身)
initialValue (作為第一次調用 callback 的第一個參數,可以控制返回值的格式)不傳默認為0

例子1:數組求和

    const arr = [1, 2, 3, 4, 5] let sum = arr.reduce(function (pre, cur) { console.log(pre, cur) //輸出的是第一項的值或上一次疊加的結果,正在被處理的元素
        return pre + cur }) console.log(sum) //15
1 2
3 3
6 4
10 5
15

例子2:不要使用JavaScript內置的parseInt()函數,利用map和reduce操作實現一個string2int()函數 

思路:1.先把字符串13579先變成Array——[1, 3, 5, 7, 9]
2.再利用reduce()就可以寫出一個把字符串轉換為Number的函數。

 

    const s = '13579'
    function string2int(s) { let arr = s.split('').map(function(x){ return +x; }) console.log(arr) //[1, 3, 5, 7, 9]
        let arr_reduce = arr.reduce(function(prev,res){ console.log(prev, res) return prev*10+res; }) console.log(arr_reduce) //13579
        return arr_reduce } string2int(s)

 

1.split() 方法用於把一個字符串分割成字符串數組。
格式:

stringObject.split(separator,howmany)

separator 必需。字符串或正則表達式,從該參數指定的地方分割 stringObject。如果是空字符串”,按每個單詞分割
howmany 可選。該參數可指定返回的數組的最大長度。如果設置了該參數,返回的子串不會多於這個參數指定的數組。如果沒有設置該參數,整個字符串都會被分割,不考慮它的長度。
2.parsenInt和+

js提供了parseInt()和parseFloat()兩個轉換函數。前者把值轉換成整數,后者把值轉換成浮點數。

在字符串前面輸入‘+’也能將字符轉化成數值,輸出如下:

 1 3
 13 5
 135 7
 1357 9
 13579

例子3:求一串字符串中每個字母出現的次數

暫時不會


參考:

https://www.cnblogs.com/jianxian/p/10582683.html

https://blog.csdn.net/baidu_36065997/article/details/79079880




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM