淺談javascript 歸并方法
ECMAScript5為數(shù)組定義了2個(gè)歸并方法:reduce()和reduceRight()。這兩個(gè)方法都會(huì)迭代數(shù)組的隨意項(xiàng),然后構(gòu)建一個(gè)最終返回的值。reduce()方法從數(shù)組的第一項(xiàng)開始,逐個(gè)遍歷到數(shù)組的最后。reduceRight()方法則剛好相反,它從數(shù)組的最后一項(xiàng)開始,向前遍歷到第一項(xiàng)。
這兩個(gè)方法都接收兩個(gè)參數(shù):一個(gè)在每一項(xiàng)上調(diào)用的函數(shù)和作為歸并基礎(chǔ)的初始值。傳給reduce()和reduceRight()的函數(shù)接收4個(gè)參數(shù):前一個(gè)值,當(dāng)前值,項(xiàng)的索引和數(shù)組對象。這個(gè)函數(shù)返回的任何值都會(huì)作為第一個(gè)參數(shù)自動(dòng)傳給下一項(xiàng)。第一次迭代發(fā)生在數(shù)組的第二項(xiàng)上,因此第一個(gè)參數(shù)是數(shù)組的第一項(xiàng),第二個(gè)參數(shù)就是數(shù)組的第二項(xiàng)。
例如,我們可以使用reduce()方法來求數(shù)組中所有值的總和。
var nums = [1,2,3,4,5]; var sum = nums.reduce(function(prev,cur,index,array){ retrun pre + cur; });
上面的代碼中,第一次執(zhí)行回調(diào)函數(shù),prev是1,cur是2。第二次prev是3,cur是3。reduce()方法會(huì)重復(fù)這個(gè)過程,直到把數(shù)組中的每一項(xiàng)都訪問一次,最后將返回的結(jié)果賦值給sum。
reduceRight()方法的左右類似,只不過是反向執(zhí)行。例如:
var nums = [1,2,3,4,5]; var sum = nums.reduceRight(function(prev,cur,index,array){ retrun pre + cur; });
這個(gè)例子中,第一次執(zhí)行回調(diào)函數(shù),prev是5,cur是4。最后求和的結(jié)果和reduce()方法相同,都是15。
支持reduce()和reduceRight()的瀏覽器有:IE9+,F(xiàn)irefox3+,Safari4+,Opeera10.5+和Chrome。
補(bǔ)充
ECMAScript5 還新增了2個(gè)歸并數(shù)組的方法:reduce()和reduceRight()。
這兩個(gè)都會(huì)迭代數(shù)組的所有項(xiàng)
reduce():從第一項(xiàng)開始逐個(gè)遍歷到最后。
reduceRight():從數(shù)組的最后一項(xiàng)開始,遍歷到數(shù)組的第一項(xiàng)。
這兩個(gè)方法都接受兩個(gè)參數(shù):在每一項(xiàng)上調(diào)用的函數(shù)(參數(shù)為:前一個(gè)值,當(dāng)前值,項(xiàng)的索引,數(shù)組對象)
這個(gè)函數(shù)返回的任何值斗毆會(huì)作為第一個(gè)參數(shù)自動(dòng)傳給下一項(xiàng)。第一次迭代發(fā)生在數(shù)組的第二項(xiàng)上,
因此第一個(gè)參數(shù)是數(shù)組的第一項(xiàng),第二個(gè)參數(shù)是數(shù)組的第二項(xiàng)
和 作為歸并基礎(chǔ)的初始值。
使用reduce()方法可以執(zhí)行數(shù)組中所有值之和的操作,比如:
var values = [1, 2, 3, 4, 5]; var sum = values.reduce(function (prev, cur, index, array) { return prev + cur; }); alert(sum); //結(jié)果一樣,只是方向相反而已 var sum2=values.reduceRight(function (prev,cur,index,array) { return prev+cur; }); alert(sum2);
歸并排序(Merge sort)是建立在歸并操作上的一種有效的排序算法。該算法是采用分治法(Divide and Conquer)的一個(gè)非常典型的應(yīng)用。
歸并(Merge)排序法是將兩個(gè)(或兩個(gè)以上)有序表合并成一個(gè)新的有序表,即把待排序序列分為若干個(gè)子序列,每個(gè)子序列是有序的。然后再把有序子序列合并為整體有序序列。
歸并排序是建立在歸并操作上的一種有效的排序算法。該算法是采用分治法(Divide and Conquer)的一個(gè)非常典型的應(yīng)用。將已有序的子序列合并,得到完全有序的序列;即先使每個(gè)子序列有序,再使子序列段間有序。若將兩個(gè)有序表合并成一個(gè)有序表,稱為2-路歸并。
相關(guān)文章
JavaScript開發(fā)過程中規(guī)范commit?msg意義詳解
這篇文章主要為大家介紹了JavaScript開發(fā)過程中規(guī)范commit?msg意義的內(nèi)容詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11javascript實(shí)現(xiàn)用戶必須勾選協(xié)議實(shí)例講解
這篇文章主要介紹了javascript實(shí)現(xiàn)用戶必須勾選協(xié)議實(shí)例講解,寫頁面的時(shí)候經(jīng)常會(huì)用到,有感興趣的同學(xué)可以學(xué)習(xí)下2021-03-03JavaScript中反正弦函數(shù)Math.asin()的使用簡介
這篇文章主要介紹了JavaScript中反正弦函數(shù)Math.asin()的使用,是JS入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-06-06JavaScript入門教程(10) 認(rèn)識其他對象
對于需要更好的控制html的一些元素,就需要了解這些了。大家知道就行,有需要時(shí)可以再看。2009-01-01JavaScript 學(xué)習(xí)筆記之基礎(chǔ)中的基礎(chǔ)
這篇文章主要介紹了JavaScript 學(xué)習(xí)筆記系列的第一篇文章,跟所有開篇一樣,本文我們介紹的都是些基礎(chǔ)中的基礎(chǔ)知識,雖然都是基礎(chǔ),但建議大家不要略過此文2015-01-01