国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

詳解數(shù)組中的reduce方法

Charles / 1316人閱讀

摘要:有沒有覺得很神奇呀去除數(shù)組中重復(fù)的元素結(jié)果分析這里主要是借助迭代功能實(shí)現(xiàn)數(shù)組的擴(kuò)展,判斷當(dāng)前元素是否已經(jīng)添加到數(shù)組中,如果不存在就從尾部添加,這個方法在去重方法中應(yīng)該算比較簡單高效的。

前言
?這幾天面試被問到了數(shù)組的方法有哪些,回答得簡直一塌糊涂,面試官說reduce的功能很強(qiáng)大,于是想對這個方法進(jìn)行總結(jié),在紅寶書中對這個方法的描述并不算多,我也是參考了其他文章才進(jìn)行總結(jié)的,下面就開始吧~
reduce的原理 簡介

?在紅寶書中,將這個方法定義為數(shù)組的歸并方法,這個方法和迭代方法(map,forEach,filter...)一樣,都會對數(shù)組進(jìn)行遍歷,reduce與他們不同的是函數(shù)的第一個參數(shù)得到的是迭代計(jì)算后的效果(看不懂沒關(guān)系,繼續(xù)往下看就會懂了)

語法

?這個方法接收兩個參數(shù):

要執(zhí)行的函數(shù),要執(zhí)行的函數(shù)中也可傳入?yún)?shù),分別為

prev:上次調(diào)用函數(shù)的返回值

cur:當(dāng)前元素

index:當(dāng)前元素索引

arr:被遍歷的數(shù)組

函數(shù)迭代的初始值

舉例

沒有設(shè)置函數(shù)的初始迭代值

let arr = [1, 2, 3, 4];
let sum = arr.reduce(function(prev, cur, index, arr) {
    console.log(prev, cur, index);
    return prev + cur;
})
console.log(arr, sum);

運(yùn)行結(jié)果:

分析:
?我們可以看到,在這里reduce的作用就是對這個數(shù)組進(jìn)行求和,迭代了3次,函數(shù)迭代的初始值是1,也就是默認(rèn)值(數(shù)組的第一項(xiàng)),prev的值是每次計(jì)算后的值,現(xiàn)在理解了吧!

設(shè)置初始迭代值

let arr = [1, 2, 3, 4];
let sum = arr.reduce(function(prev, cur, index, arr) {
    console.log(prev, cur, index);
    return prev + cur;
},5)
console.log(arr, sum);

運(yùn)行結(jié)果:

分析:
?這里我們添加了一個初始的迭代值,也就是讓prev從5開始計(jì)算,可以看到,這里迭代了4次,結(jié)果也加上了初始值。

reduce的應(yīng)用 初級應(yīng)用

?最常見的應(yīng)用一般就是求和以及求乘積了,比如說下面的例子:

let arr = [1,2,3,4,5]
console.log(arr.reduce((a,b) => a + b))//15
console.log(arr.reduce((a,b) => a * b))//120
高級應(yīng)用 計(jì)算數(shù)組中每個元素出現(xiàn)的次數(shù)
let arr = ["name","age","long","short","long","name","name"] 

let arrResult = arr.reduce((pre,cur) =>{
    console.log(pre,cur)
    if(cur in pre){
        pre[cur]++
    }else{
        pre[cur] = 1
    }
    return pre
},{})

console.log(arrResult)//結(jié)果:{name: 3, age: 1, long: 2, short: 1}

運(yùn)行結(jié)果:(第一個console.log)

分析:
?大概的解釋一下,運(yùn)行過程是這樣的:

由于設(shè)置了迭代初始值,pre的第一個值是一個空對象,此時cur為name,然后進(jìn)行判斷,發(fā)現(xiàn)在pre中沒有name屬性,所以就將name對應(yīng)的屬性值賦為1;

后面沒有重復(fù)的是一樣的道理,如果碰到重復(fù)值,就會將該屬性值加1,這樣就能計(jì)算元素重復(fù)的次數(shù)了。(有沒有覺得很神奇呀~)

去除數(shù)組中重復(fù)的元素
let arrResult = arr.reduce((pre,cur) =>{
    if(!pre.includes(cur)){
        pre.push(cur)
    }
    return pre;
},[])

console.log(arrResult)//結(jié)果:["name", "age", "long", "short"]

分析:
?這里主要是借助迭代功能實(shí)現(xiàn)數(shù)組的擴(kuò)展,判斷當(dāng)前元素是否已經(jīng)添加到數(shù)組中,如果不存在就從尾部添加,這個方法在去重方法中應(yīng)該算比較簡單高效的。

對對象的屬性求和
let person = [
    {
        name: "xiaoming",
        age: 18
    },{
        name: "xiaohong",
        age: 17
    },{
        name: "xiaogang",
        age: 19
    }
]

let result = person.reduce((a,b) =>{
    a = a + b.age;
    return a;
},0)

console.log(result)//結(jié)果:54

分析:
?這里主要就是利用reduce第一個參數(shù)是迭代,可以通過初始化這個參數(shù)的數(shù)據(jù)類型,達(dá)到想實(shí)現(xiàn)的效果。

總結(jié)

?使用reduce操作數(shù)組時,最重要的就是理解第一個參數(shù)是怎么迭代的,可以好好利用初始化這個參數(shù)的數(shù)據(jù)類型來減少很多不必要的代碼。上面舉的三個高級應(yīng)用的例子都是利用了這個優(yōu)點(diǎn),當(dāng)然,reduce還有更多的應(yīng)用,后面碰到還會進(jìn)行補(bǔ)充的。

?如果覺得有用就給個贊吧~

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/100153.html

相關(guān)文章

  • JS進(jìn)階篇--JS數(shù)組reduce()方法詳解及高級技巧

    摘要:基本概念方法接收一個函數(shù)作為累加器,數(shù)組中的每個值從左到右開始縮減,最終為一個值。例進(jìn)階應(yīng)用使用方法可以完成多維度的數(shù)據(jù)疊加。在該函數(shù)內(nèi)部,則執(zhí)行多維的疊加工作。參考的內(nèi)建函數(shù)數(shù)組方法的高級技巧 基本概念 reduce() 方法接收一個函數(shù)作為累加器(accumulator),數(shù)組中的每個值(從左到右)開始縮減,最終為一個值。 reduce 為數(shù)組中的每一個元素依次執(zhí)行回調(diào)函數(shù),不包括...

    jerryloveemily 評論0 收藏0
  • javascript reduce詳解及應(yīng)用

    摘要:循環(huán)數(shù)組每一項(xiàng)數(shù)組下標(biāo)當(dāng)前調(diào)用數(shù)組本身可選初始值,作為回調(diào)函數(shù)第一個參數(shù)的默認(rèn)值,也是每次回調(diào)的返回值,見代碼首頁問題轉(zhuǎn)化為數(shù)組首頁問題轉(zhuǎn)化后效果這個栗子來自配置路由時遇到的,當(dāng)時也是優(yōu)化了好幾個版本。 reduce callback(一個在數(shù)組中每一項(xiàng)上調(diào)用的函數(shù),接受四個參數(shù):)previousValue(上一次調(diào)用回調(diào)函數(shù)時的返回值,或者初始值)currentValue(當(dāng)前正...

    Cruise_Chan 評論0 收藏0
  • js的parseInt() map(),reduce()方法詳解

    摘要:比的函數(shù)多一個參數(shù)初始值,最終值,因?yàn)榉椒〝?shù)組每次輸入兩個元素。 parseInt(string,radius)接收兩個參數(shù), string(必選)如果接受的是‘a(chǎn)bc’,純字符串,返回NaN,要是‘123’會轉(zhuǎn)化為123,要是‘a(chǎn)bc123’會轉(zhuǎn)化為123,radius(可選)表示的是基數(shù),指定前面的string是一個幾進(jìn)制的數(shù)(不是將string轉(zhuǎn)化為多少進(jìn)制,而是這個string...

    zzir 評論0 收藏0
  • Javascript數(shù)組詳解

    摘要:創(chuàng)建數(shù)組判斷比是否是個數(shù)組取數(shù)組元素屬性返回?cái)?shù)組的成員數(shù)量。增加數(shù)組元素方法在數(shù)組的末尾增加一個或多個元素,并返回?cái)?shù)組的新長度。表示要移除的數(shù)組元素的個數(shù)要添加進(jìn)數(shù)組的元素最主要的的用途是向數(shù)組的中部插入元素。 數(shù)組的定義 數(shù)組是按序號排列的一組值,每個值的位置都有編號(從0開始)。數(shù)組本質(zhì)上是一種特殊的對象。它的鍵名是按(0,1,2...)排列的一組數(shù)字。 創(chuàng)建數(shù)組: var a...

    geekidentity 評論0 收藏0
  • redux middleware 詳解

    摘要:執(zhí)行完后,獲得數(shù)組,,它保存的對象是圖中綠色箭頭指向的匿名函數(shù),因?yàn)殚]包,每個匿名函數(shù)都可以訪問相同的,即。是函數(shù)式編程中的組合,將中的所有匿名函數(shù),,組裝成一個新的函數(shù),即新的,當(dāng)新執(zhí)行時,,從左到右依次執(zhí)行所以順序很重要。 前言 It provides a third-party extension point between dispatching anaction, and t...

    yanwei 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<