JavaScript數(shù)組迭代的五種方式

1.背景介紹

使用JavaScript數(shù)組常常需要對數(shù)組進(jìn)行遍歷、迭代操作。而我們常用的就是for語句對數(shù)組進(jìn)行迭代。然而在ECMAscript5已經(jīng)為數(shù)組定義了5個(gè)迭代的方法,分別是:filter、some、map、foreach、every,下面我們講講它們的具體作用。

2.知識剖析

2.1、every():對數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),如果該函數(shù)對每一項(xiàng)都返回true,則返回true ;

some():對數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),如果該函數(shù)對任一項(xiàng)返回true,則返回true;

為了加深對它們的理解,以上兩個(gè)迭代方式有必要放在一起demo,

some+every demo

some+every console結(jié)果

通過 demo,可以看出 every() ,在遍歷數(shù)組項(xiàng)的時(shí)候,第一項(xiàng)的值就已經(jīng)為false了,所以直接返回false不再繼續(xù)執(zhí)行后面的迭代;

第二個(gè),some() ,在遍歷數(shù)組項(xiàng)的時(shí)候,當(dāng)?shù)谝粋€(gè)滿足函數(shù)體的項(xiàng)出現(xiàn),就直接返回true,并且不再執(zhí)行后面的迭代;

2.2、filter():對數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),返回該函數(shù)會返回true 的項(xiàng)組成的數(shù)組。

filter demo

filter console結(jié)果

通過demo,可以看出 filter() 把原數(shù)組arr每一項(xiàng)返回為true的項(xiàng),重新組成數(shù)組,并打印出該數(shù)組每個(gè)索引的值和數(shù)組長度;

2.3、map():對數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)組 ;

man demo

man console結(jié)果

通過demo可以看出 map() 把原數(shù)組arr的每一項(xiàng)迭代返回的結(jié)果,重新組成數(shù)組,并打印出該數(shù)組每個(gè)索引的值和數(shù)組長度;

2.4、forEach():對數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),這個(gè)方法并沒有返回值 ;

forEach demo

forEach console 結(jié)果

通過demo可以看出 forEach() ,只是對每個(gè)數(shù)組項(xiàng)運(yùn)行指定的函數(shù)體,這個(gè)迭代方式并沒有返回值;

3.常見問題

如何判斷兩個(gè)數(shù)組中相同的項(xiàng),然后將相同的部分或者不同的部分生成新的數(shù)組?

4.解決方案

var num1 = [1,2,3,4,5,7];

var num2 = [2,3,5];

var nums = num1.filter(function(aaa){

return num2.indexOf(aaa) >= 0;

});

console.log(nums);

5.擴(kuò)展思考

問:相對于for(),JS數(shù)組自定義的數(shù)組迭代方式有哪些好處?這里面參數(shù)item、index和array代表的是什么?

答:在實(shí)現(xiàn)相同功能的前提下,后者除了能夠節(jié)省代碼量外,在實(shí)現(xiàn)某些功能上的流程中存在很多有意思的優(yōu)勢,比如forEach相比普通的for循環(huán)的優(yōu)勢在于對稀疏數(shù)組的處理,會跳過數(shù)組中的空位。for+i在性能測試上是優(yōu)越于后者,但是前提是,array的length要事先計(jì)算出來,而在處理非常大量的數(shù)據(jù)時(shí)候,后者的優(yōu)勢就顯而易見了。

答:傳入這些方法中的函數(shù)會接收三個(gè)參數(shù),item表示遍歷后的當(dāng)前對象,里面的index代表當(dāng)前循環(huán)到第幾個(gè)索引,array代表數(shù)組對象本身;

6.參考文獻(xiàn)

JavaScript高級程序設(shè)計(jì)第三版

W3Cschool JavaScript教程

網(wǎng)絡(luò)搜索引擎

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

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

  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,679評論 0 4
  • 數(shù)組是值的有序集合。每個(gè)值叫做一個(gè)元素,而每個(gè)元素在數(shù)組中有一個(gè)位置,以數(shù)字表示,稱為索引。 JavaScript...
    劼哥stone閱讀 1,253評論 6 20
  • 沒錢做什么都感覺底氣不足。 努力打好技術(shù)基礎(chǔ),積累資金,賺錢賺錢賺錢。 牽掛太多,心才會那么累。 學(xué)習(xí)記錄:字符串...
    阿元閱讀 179評論 0 0
  • 情緒每個(gè)人都有,但是,不是每個(gè)人都能控制好自己的情緒 。 01 朋友A是...
    小小青橙閱讀 273評論 2 3
  • 圖像標(biāo)簽( )和源屬性(Src) 在 HTML 中,圖像由 標(biāo)簽定義。 是空標(biāo)簽,意思是說,它只包含屬性,并且...
    楓羽望空閱讀 856評論 0 1

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