书中是这么写的
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,此次博客写完了,谢谢你们阅读,求点赞求人气哈哈~~