JavaScript數(shù)組中的迭代和歸并方法

迭代方法

ECMAScript 5為數(shù)組定義了5個(gè)迭代方法。每個(gè)方法都接受兩個(gè)參數(shù):要在每一項(xiàng)上運(yùn)行的函數(shù)和(可選的)運(yùn)行該函數(shù)的作用域?qū)ο?影響this的值。傳入這些方法中的函數(shù)會(huì)接收三個(gè)參數(shù):數(shù)組項(xiàng)的值、該項(xiàng)在數(shù)組中的位置和數(shù)組對(duì)象本身。根據(jù)使用的方法不同,這個(gè)函數(shù)執(zhí)行后的返回值可能會(huì)也可能不會(huì)影響方法的返回值。以下是5個(gè)迭代方法的作用。

方法名 作用
every() 對(duì)數(shù)組中每一項(xiàng)都運(yùn)行該函數(shù),如果該函數(shù)對(duì)每一項(xiàng)都返回true,則返回true
filter() 對(duì)數(shù)組中每一項(xiàng)都運(yùn)行該函數(shù),返回該函數(shù)會(huì)返回true的項(xiàng)組成的數(shù)組
forEach() 對(duì)數(shù)組中每一項(xiàng)都運(yùn)行該函數(shù),該方法沒(méi)有返回值
map() 對(duì)數(shù)組中每一項(xiàng)都運(yùn)行該函數(shù),返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)據(jù)
some() 對(duì)數(shù)組中每一項(xiàng)都運(yùn)行該函數(shù),如果該函數(shù)對(duì)任一項(xiàng)返回true,則返回true

以上方法都不會(huì)修改數(shù)組中包含的值。
注意:

1. every()和some()

every()和some()方法最相似,every()執(zhí)行的時(shí)候,若數(shù)組中每一項(xiàng)都返回true,則返回true,否則返回false,而some()方法執(zhí)行時(shí),只要數(shù)組中有一項(xiàng)返回true,則結(jié)果就返回true。舉例如下:

 var values = [5, 6, 7, 8, 9, 8, 7, 6, 5];
 var everyResult = values.every(function(item, index, array) {
     return (item > 6);
 });
 alert(everyResult);//false
 var someValue = values.some(function(item, index, array) {
     return (item > 6);
 });
 alert(someValue);//true

以上代碼調(diào)用了every()和some()函數(shù),傳入的函數(shù)只要給定項(xiàng)大于6就返回true。every()函數(shù)返回false,因?yàn)橹挥胁糠謹(jǐn)?shù)組項(xiàng)符合條件。對(duì)于some(),結(jié)果就是true,因?yàn)橹辽儆幸豁?xiàng)是大于6。

2. filter()

filter()函數(shù)利用指定的函數(shù)確定是否在數(shù)組中包含某一項(xiàng)。例如要返回一個(gè)所有值都大于6的數(shù)組,可以如下使用:

var values = [5, 6, 7, 8, 9, 8, 7, 6, 5];
var filterResult = values.filter(function(item, index, array) {
    return (item > 6);
});
alert(filterResult);//[7,8,9, 8, 7]

filter方法對(duì)查詢(xún)符合某些條件的所有數(shù)據(jù)非常又用。

3. map()

map()函數(shù)也返回一個(gè)數(shù)據(jù),而這個(gè)數(shù)據(jù)的每一項(xiàng)都實(shí)在原始數(shù)據(jù)中的對(duì)應(yīng)項(xiàng)上運(yùn)行傳入函數(shù)的結(jié)果。例如,要給數(shù)據(jù) 中每一項(xiàng)乘以2,然后返回這些乘積組成的數(shù)據(jù),則可以用如下方法實(shí)現(xiàn):

var values = [5, 6, 7, 8, 9, 8, 7, 6, 5];
var mapResult = values.map(function(item, index, array) {
    return item * 2;
});
alert(mapResult);//[10,12,14,16,18,16,14,12,10]

map()方法適合創(chuàng)建包含的項(xiàng)與另一個(gè)數(shù)組一一對(duì)應(yīng)的數(shù)據(jù)。

4.forEach()

對(duì)數(shù)組中每一項(xiàng)運(yùn)行傳入的函數(shù),這個(gè)函數(shù)沒(méi)有返回值,本質(zhì)上與for循環(huán)迭代數(shù)據(jù)一樣。

var values = [5, 6, 7, 8, 9, 8, 7, 6, 5];
var forEachResult = values.forEach(function(item, index, array) {
    //執(zhí)行某些操作
});

通過(guò)迭代方法,可以大大方便處理數(shù)組的任務(wù)。

歸并方法

ECMAScript5還有兩個(gè)歸并數(shù)組的方法:reduce()和reduceRight()。這兩個(gè)方法都會(huì)迭代數(shù)組的所有項(xiàng),然后構(gòu)建一個(gè)最終返回的值。其中reduce()方法從數(shù)據(jù)第一項(xiàng)開(kāi)始,逐個(gè)遍歷到最后,reduceRight()則從數(shù)據(jù)最后哦一項(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ì)作為參數(shù)自動(dòng)傳遞給下一項(xiàng)。第一次迭代發(fā)生在數(shù)組的第二項(xiàng)上,因此第一個(gè)參數(shù)是數(shù)組的第一項(xiàng),第二個(gè)參數(shù)是數(shù)組的第二項(xiàng)。

var numbers = [5,4,3,2,1];
var reduceResult = numbers.reduce(function(preVal, currVal, index, array) {
    return preVal + currVal;
});
alert(reduceResult);//15

第一次執(zhí)行回調(diào)函數(shù),preVal是5,currVal是4,第二次preVal是9,currVal是3,該過(guò)程持續(xù)到數(shù)組便利完,最后返回結(jié)果。
reduceRight()作用類(lèi)似,只不過(guò)方向相反而已。

var numbers = [5,4,3,2,1];
var reduceResult = numbers. reduceRight(function(preVal, currVal, index, array) {
    return preVal + currVal;
});
alert(reduceResult);//15

使用時(shí)候選擇reduce()還是reduceRight()主要取決于從哪頭開(kāi)始遍歷數(shù)組,除此之外,他們完全相同。

》》》不忘初心,繼續(xù)前進(jìn)!》》》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第5章 引用類(lèi)型(返回首頁(yè)) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類(lèi)型 使用基本類(lèi)型...
    大學(xué)一百閱讀 3,679評(píng)論 0 4
  • 數(shù)組是值的有序集合。每個(gè)值叫做一個(gè)元素,而每個(gè)元素在數(shù)組中有一個(gè)位置,以數(shù)字表示,稱(chēng)為索引。 JavaScript...
    劼哥stone閱讀 1,247評(píng)論 6 20
  • 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的 JavaScript 類(lèi)型 使用基本類(lèi)型和基本包裝類(lèi)型 引用類(lèi)型的...
    悶油瓶小張閱讀 779評(píng)論 0 0
  • 本文總結(jié)了數(shù)組所有的方法。 1. 檢測(cè)對(duì)象是不是數(shù)組 instanceof操作符 Array.isArray()方...
    胡不歸vac閱讀 749評(píng)論 0 1
  • 昨天和男票鬧了點(diǎn)不愉快,緣起是他又在電話里向我抱怨生活的不順,實(shí)際上他持續(xù)這種狀態(tài),已經(jīng)將近兩三個(gè)月之久了,這一段...
    我有酒閱讀 333評(píng)論 0 0

友情鏈接更多精彩內(nèi)容