書中是這麼寫的
ECMAScript 5 還新增了兩個歸併數組的方法: reduce()和 reduceRight()。這兩個方法都會迭代數組的全部項,而後構建一個最終返回的值。其中, reduce()方法從數組的第一項開始,逐個遍歷到最後。而 reduceRight()則從數組的最後一項開始,向前遍歷到第一項。javascript
這兩個方法都接收兩個參數:一個在每一項上調用的函數和(可選的)做爲歸併基礎的初始值。傳給 reduce()和 reduceRight()的函數接收 4 個參數:前一個值、當前值、項的索引和數組對象。
這個函數返回的任何值都會做爲第一個參數自動傳給下一項。第一次迭代發生在數組的第二項上,所以第一個參數是數組的第一項,第二個參數就是數組的第二項。
使用 reduce()方法能夠執行求數組中全部值之和的操做,好比:java
var values = [1,2,3,4,5]; var sum = values.reduce(function(prev, cur, index, array){ return prev + cur; }); alert(sum);
第一次執行回調函數, prev 是 1, cur 是 2。第二次, prev 是 3(1 加 2 的結果), cur 是 3(數組的第三項)。這個過程會持續到把數組中的每一項都訪問一遍,最後返回結果。算法
個人理解
數組values有5項,因此數組要執行4次運算
那如何證實呢,下面我本身寫的demosegmentfault
let arr=[1,2,3,4,5] let sum = arr.reduce((prev,cur,index,array)=>{ console.log("執行了第",index,"次cur的值是",cur,"prev的值是",prev) //原來console.log這樣能夠用 return prev+cur }) console.log(sum)
結果是數組
執行了第 1 次cur的值是 2 prev的值是 1<br/> 執行了第 2 次cur的值是 3 prev的值是 3<br/> 執行了第 3 次cur的值是 4 prev的值是 6<br/> 執行了第 4 次cur的值是 5 prev的值是 10<br/> 15
===>猜測get!!!
===>不過若是用迭代能夠怎麼作數據結構
迭代須要知足的三個條件:
int sum(int n ) { if(n==1) return 1; else return n+sum(n-1); }
一樣是求0~n的和,這段代碼是每次在函數體中調用自身函數,1~n的和能夠拆分紅兩個部分,1~n-1的和加上n,所以,遞歸的思想就是:在函數或子過程的內部,直接或者間接地調用本身的算法,從而把問題轉化爲規模縮小了的同類問題的子問題<br/>
遞歸算法的步驟:函數
剛纔的函數設計
let arr=[1,2,3,4,5] let sum = arr.reduce((prev,cur,index,array)=>{ console.log("執行了第",index,"次cur的值是",cur,"prev的值是",prev) //原來console.log這樣能夠用 return prev+cur }) console.log(sum)
就能夠理解爲code
function add(n){ if(n==1){ return 1 } return add(n-1)+n } console.log(add(5));
當第一次執行的時候函數add(n)碰到add(n-1)的時候就會進入這個函數執行add(n-1),[在這裏,咱們注意到add(1)=1( 就是說遞歸終止)]以後又遇到add( n-1-1),當n=2時 =>
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,此次博客寫完了,謝謝你們閱讀,求點贊求人氣哈哈~~