摘要:而則從數組的最后一項開始,向前遍歷到第一項。傳給和的函數接收個參數前一個值當前值項的索引和數組對象。這個函數返回的任何值都會作為第一個參數自動傳給下一項。第二次,是加的結果,是數組的第三項。
2018年1月6日
什么是array的reduce,用法?
什么是迭代==>(在學校學的被狗吃了系列~)
關于Array.ruduce( )書中是這么寫的
ECMAScript 5 還新增了兩個歸并數組的方法: reduce()和 reduceRight()。這兩個方法都會迭代數組的所有項,然后構建一個最終返回的值。其中, reduce()方法從數組的第一項開始,逐個遍歷到最后。而 reduceRight()則從數組的最后一項開始,向前遍歷到第一項。
這兩個方法都接收兩個參數:一個在每一項上調用的函數和(可選的)作為歸并基礎的初始值。傳給 reduce()和 reduceRight()的函數接收 4 個參數:前一個值、當前值、項的索引和數組對象。
這個函數返回的任何值都會作為第一個參數自動傳給下一項。第一次迭代發生在數組的第二項上,因此第一個參數是數組的第一項,第二個參數就是數組的第二項。
使用 reduce()方法可以執行求數組中所有值之和的操作,比如:
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次運算
(1+2) => 3
(3+3) => 6
(6+4) => 10
(10+5) => 15
那如何證明呢,下面我自己寫的demo
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
執行了第 2 次cur的值是 3 prev的值是 3
執行了第 3 次cur的值是 4 prev的值是 6
執行了第 4 次cur的值是 5 prev的值是 10
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,因此,遞歸的思想就是:在函數或子過程的內部,直接或者間接地調用自己的算法,從而把問題轉化為規模縮小了的同類問題的子問題
遞歸算法的步驟:
確定遞歸公式,如sum(n) = sum(n-1)+n
確定遞歸結束條件,如n=1結束遞歸
剛才的函數
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)
就可以理解為
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,這次博客寫完了,謝謝大家閱讀,求點贊求人氣哈哈~~
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/112963.html
摘要:而則從數組的最后一項開始,向前遍歷到第一項。傳給和的函數接收個參數前一個值當前值項的索引和數組對象。這個函數返回的任何值都會作為第一個參數自動傳給下一項。第二次,是加的結果,是數組的第三項。 2018年1月6日 首先我要感謝我的同事徒步上山看日出在我第一份實習的時候對我的指導,現在我也開始跟他一樣開始養成寫博客的習慣 現在開始討論我遇到的第一個問題,這是我在看javascript高級程...
摘要:而則從數組的最后一項開始,向前遍歷到第一項。傳給和的函數接收個參數前一個值當前值項的索引和數組對象。這個函數返回的任何值都會作為第一個參數自動傳給下一項。第二次,是加的結果,是數組的第三項。 2018年1月6日 首先我要感謝我的同事徒步上山看日出在我第一份實習的時候對我的指導,現在我也開始跟他一樣開始養成寫博客的習慣 現在開始討論我遇到的第一個問題,這是我在看javascript高級程...
摘要:正文和中新增的的數組迭代方法如下其中,是新增的,其余都是新增的。指數組后,返回過濾后的新數組。它的參數跟方法是一樣的所有數組成員依次執行回調函數,直到找出第一個返回值為的成員,然后返回該成員。 前言 ES5和ES6中新增了不少東西,對于數組而言,新增了不少迭代方法,讓我們可以拋棄for循環,更方便的寫JS代碼。 正文 ES5和ES6中新增的的數組迭代方法如下: forEach map...
摘要:每次被執行時,和被傳入,這個根據進行累加或者是自身消減,英文原意,進而返回最新的。 之前的一篇文章:從一道面試題,到我可能看了假源碼討論了bind方法的各種進階Pollyfill,今天再分享一個有意思的題目。 從解這道題目出發,我會談到數組的Reduce方法,ES6特性和Redux數據流框架中Reducer的命名等等。一道典型的題目,卻如唐代詩人章碣《對月》詩中所云:別有洞天三十六,水...
閱讀 2066·2021-11-11 16:55
閱讀 1401·2021-09-28 09:36
閱讀 1047·2019-08-29 15:21
閱讀 1578·2019-08-29 14:10
閱讀 2764·2019-08-29 14:08
閱讀 1637·2019-08-29 12:31
閱讀 3251·2019-08-29 12:31
閱讀 982·2019-08-26 16:47