摘要:而則從數(shù)組的最后一項(xiàng)開(kāi)始,向前遍歷到第一項(xiàng)。傳給和的函數(shù)接收個(gè)參數(shù)前一個(gè)值當(dāng)前值項(xiàng)的索引和數(shù)組對(duì)象。這個(gè)函數(shù)返回的任何值都會(huì)作為第一個(gè)參數(shù)自動(dòng)傳給下一項(xiàng)。第二次,是加的結(jié)果,是數(shù)組的第三項(xiàng)。
2018年1月6日
什么是array的reduce,用法?
什么是迭代==>(在學(xué)校學(xué)的被狗吃了系列~)
書(shū)中是這么寫(xiě)的
ECMAScript 5 還新增了兩個(gè)歸并數(shù)組的方法: reduce()和 reduceRight()。這兩個(gè)方法都會(huì)迭代數(shù)組的所有項(xiàng),然后構(gòu)建一個(gè)最終返回的值。其中, reduce()方法從數(shù)組的第一項(xiàng)開(kāi)始,逐個(gè)遍歷到最后。而 reduceRight()則從數(shù)組的最后一項(xiàng)開(kāi)始,向前遍歷到第一項(xiàng)。
這兩個(gè)方法都接收兩個(gè)參數(shù):一個(gè)在每一項(xiàng)上調(diào)用的函數(shù)和(可選的)作為歸并基礎(chǔ)的初始值。傳給 reduce()和 reduceRight()的函數(shù)接收 4 個(gè)參數(shù):前一個(gè)值、當(dāng)前值、項(xiàng)的索引和數(shù)組對(duì)象。
這個(gè)函數(shù)返回的任何值都會(huì)作為第一個(gè)參數(shù)自動(dòng)傳給下一項(xiàng)。第一次迭代發(fā)生在數(shù)組的第二項(xiàng)上,因此第一個(gè)參數(shù)是數(shù)組的第一項(xiàng),第二個(gè)參數(shù)就是數(shù)組的第二項(xiàng)。
使用 reduce()方法可以執(zhí)行求數(shù)組中所有值之和的操作,比如:
var values = [1,2,3,4,5]; var sum = values.reduce(function(prev, cur, index, array){ return prev + cur; }); alert(sum);
第一次執(zhí)行回調(diào)函數(shù), prev 是 1, cur 是 2。第二次, prev 是 3(1 加 2 的結(jié)果), cur 是 3(數(shù)組的第三項(xiàng))。這個(gè)過(guò)程會(huì)持續(xù)到把數(shù)組中的每一項(xiàng)都訪問(wèn)一遍,最后返回結(jié)果。
我的理解
數(shù)組values有5項(xiàng),所以數(shù)組要執(zhí)行4次運(yùn)算
(1+2) => 3
(3+3) => 6
(6+4) => 10
(10+5) => 15
那如何證明呢,下面我自己寫(xiě)的demo
let arr=[1,2,3,4,5] let sum = arr.reduce((prev,cur,index,array)=>{ console.log("執(zhí)行了第",index,"次cur的值是",cur,"prev的值是",prev) //原來(lái)console.log這樣可以用 return prev+cur }) console.log(sum)
結(jié)果是
執(zhí)行了第 1 次cur的值是 2 prev的值是 1
執(zhí)行了第 2 次cur的值是 3 prev的值是 3
執(zhí)行了第 3 次cur的值是 4 prev的值是 6
執(zhí)行了第 4 次cur的值是 5 prev的值是 10
15
===>猜想get!!!
===>不過(guò)如果用迭代可以怎么做
迭代需要滿足的三個(gè)條件:
必須有一個(gè)明確的中止條件
該函數(shù)所處理的數(shù)據(jù)規(guī)模必須在遞減
這個(gè)轉(zhuǎn)化必須是可解的
int sum(int n ) { if(n==1) return 1; ?else return n+sum(n-1); }
同樣是求0~n的和,這段代碼是每次在函數(shù)體中調(diào)用自身函數(shù),1~n的和可以拆分成兩個(gè)部分,1~n-1的和加上n,因此,遞歸的思想就是:在函數(shù)或子過(guò)程的內(nèi)部,直接或者間接地調(diào)用自己的算法,從而把問(wèn)題轉(zhuǎn)化為規(guī)模縮小了的同類問(wèn)題的子問(wèn)題
遞歸算法的步驟:
確定遞歸公式,如sum(n) = sum(n-1)+n
確定遞歸結(jié)束條件,如n=1結(jié)束遞歸
剛才的函數(shù)
let arr=[1,2,3,4,5] let sum = arr.reduce((prev,cur,index,array)=>{ console.log("執(zhí)行了第",index,"次cur的值是",cur,"prev的值是",prev) //原來(lái)console.log這樣可以用 return prev+cur }) console.log(sum)
就可以理解為
function add(n){ if(n==1){ return 1 } return add(n-1)+n } console.log(add(5));
當(dāng)?shù)谝淮螆?zhí)行的時(shí)候函數(shù)add(n)碰到add(n-1)的時(shí)候就會(huì)進(jìn)入這個(gè)函數(shù)執(zhí)行add(n-1),[在這里,我們注意到add(1)=1(就是說(shuō)遞歸終止)]之后又遇到add(n-1-1),當(dāng)n=2時(shí) =>
add(2){ add(2-1)+2 => add(1)+2 => 1+2 }
由此可推
add(3){ add(2)+3 =>1+2+3 }
add(4){ add(3)+4 =>1+2+3+4 }
add(5){ add(4)+5 => 1+2+3+4+5 }
so,這次博客寫(xiě)完了,謝謝大家閱讀,求點(diǎn)贊求人氣哈哈~~
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/51662.html
摘要:而則從數(shù)組的最后一項(xiàng)開(kāi)始,向前遍歷到第一項(xiàng)。傳給和的函數(shù)接收個(gè)參數(shù)前一個(gè)值當(dāng)前值項(xiàng)的索引和數(shù)組對(duì)象。這個(gè)函數(shù)返回的任何值都會(huì)作為第一個(gè)參數(shù)自動(dòng)傳給下一項(xiàng)。第二次,是加的結(jié)果,是數(shù)組的第三項(xiàng)。 2018年1月6日 首先我要感謝我的同事徒步上山看日出在我第一份實(shí)習(xí)的時(shí)候?qū)ξ业闹笇?dǎo),現(xiàn)在我也開(kāi)始跟他一樣開(kāi)始養(yǎng)成寫(xiě)博客的習(xí)慣 現(xiàn)在開(kāi)始討論我遇到的第一個(gè)問(wèn)題,這是我在看javascript高級(jí)程...
摘要:而則從數(shù)組的最后一項(xiàng)開(kāi)始,向前遍歷到第一項(xiàng)。傳給和的函數(shù)接收個(gè)參數(shù)前一個(gè)值當(dāng)前值項(xiàng)的索引和數(shù)組對(duì)象。這個(gè)函數(shù)返回的任何值都會(huì)作為第一個(gè)參數(shù)自動(dòng)傳給下一項(xiàng)。第二次,是加的結(jié)果,是數(shù)組的第三項(xiàng)。 2018年1月6日 首先我要感謝我的同事徒步上山看日出在我第一份實(shí)習(xí)的時(shí)候?qū)ξ业闹笇?dǎo),現(xiàn)在我也開(kāi)始跟他一樣開(kāi)始養(yǎng)成寫(xiě)博客的習(xí)慣 現(xiàn)在開(kāi)始討論我遇到的第一個(gè)問(wèn)題,這是我在看javascript高級(jí)程...
摘要:正文和中新增的的數(shù)組迭代方法如下其中,是新增的,其余都是新增的。指數(shù)組后,返回過(guò)濾后的新數(shù)組。它的參數(shù)跟方法是一樣的所有數(shù)組成員依次執(zhí)行回調(diào)函數(shù),直到找出第一個(gè)返回值為的成員,然后返回該成員。 前言 ES5和ES6中新增了不少東西,對(duì)于數(shù)組而言,新增了不少迭代方法,讓我們可以拋棄for循環(huán),更方便的寫(xiě)JS代碼。 正文 ES5和ES6中新增的的數(shù)組迭代方法如下: forEach map...
摘要:每次被執(zhí)行時(shí),和被傳入,這個(gè)根據(jù)進(jìn)行累加或者是自身消減,英文原意,進(jìn)而返回最新的。 之前的一篇文章:從一道面試題,到我可能看了假源碼討論了bind方法的各種進(jìn)階Pollyfill,今天再分享一個(gè)有意思的題目。 從解這道題目出發(fā),我會(huì)談到數(shù)組的Reduce方法,ES6特性和Redux數(shù)據(jù)流框架中Reducer的命名等等。一道典型的題目,卻如唐代詩(shī)人章碣《對(duì)月》詩(shī)中所云:別有洞天三十六,水...
閱讀 2263·2021-09-30 09:48
閱讀 3634·2021-09-24 10:27
閱讀 1791·2021-09-22 15:32
閱讀 2026·2021-08-09 13:44
閱讀 3575·2019-08-30 15:55
閱讀 1045·2019-08-29 17:12
閱讀 2000·2019-08-29 17:05
閱讀 2918·2019-08-29 13:43