淺談JS數(shù)組內(nèi)置遍歷方法有哪些和區(qū)別
forEach()(ES6)方法
forEach()(ES6)方法對(duì)數(shù)組的每個(gè)元素執(zhí)行一次給定的函數(shù)。
1. 數(shù)組里的元素個(gè)數(shù)有幾個(gè),該方法里的回調(diào)就會(huì)執(zhí)行幾次
2. 第一個(gè)參數(shù)是數(shù)組里的元素,第二個(gè)參數(shù)為數(shù)組里元素的索引,第三個(gè)參數(shù)則是它自己(利用第三個(gè)參數(shù)可以進(jìn)行數(shù)組去重)
3. 數(shù)組自帶的遍歷方法,foreach在循環(huán)次數(shù)未知或者計(jì)算起來(lái)較復(fù)雜的情況下效率比f(wàn)or循環(huán)高
4. 循環(huán)的數(shù)組元素是基本數(shù)據(jù)類型,不會(huì)改變?cè)瓟?shù)據(jù)的數(shù)據(jù),循環(huán)的數(shù)組元素為對(duì)象,會(huì)改變?cè)瓟?shù)組的對(duì)象屬性的值
5. 循環(huán)過程中不支持修改索引,回調(diào)中使用return不會(huì)報(bào)錯(cuò),但是無(wú)效
注意:不能使用break和continue跳出整個(gè)循環(huán)或當(dāng)前循環(huán)的,會(huì)報(bào)錯(cuò),但是結(jié)合try...catch可以實(shí)現(xiàn)跳出循環(huán)
const array1 = ['a', 'b', 'c']; array1.forEach(element => console.log(element));
缺點(diǎn):沒有辦法中止或跳出 `forEach()` 循環(huán)
map()(ES6) 方法
map()(ES6) 方法創(chuàng)建一個(gè)新數(shù)組,其結(jié)果是該數(shù)組中的每個(gè)元素是調(diào)用一次提供的函數(shù)后的返回值。
const array1 = [1, 4, 9, 16]; const map1 = array1.map(x => x * 2); console.log(map1); //[2, 8, 18, 32]
三個(gè)參數(shù):數(shù)組元素,元素索引,原數(shù)組本身
flatMap()方法
flatMap()方法首先使用映射函數(shù)映射每個(gè)元素,然后將結(jié)果壓縮成一個(gè)新數(shù)組。它與 map 連著深度值為1的 flat 幾乎相同,但 flatMap 通常在合并成一種方法的效率稍微高一些。
var arr1 = [1, 2, [3, 4]]; arr1.flatMap(x => x); //[1, 2, 3, 4] var arr1 = [1, 2, 3, 4]; arr1.flatMap(x => [[x * 2]]); // [[2], [4], [6], [8]]
for...in...
這個(gè)循環(huán)用的人也很多,但是效率最低(輸出的 key 是數(shù)組索引),如果遍歷的是對(duì)象,輸出的則是對(duì)象的屬性名
for...of...
性能要好于 `for..in...`,但仍然比不上普通的 `for` 循環(huán)
注意:不能循環(huán)對(duì)象,因?yàn)槿魏螖?shù)據(jù)結(jié)構(gòu)只要部署 Iterator接口,就可以完成遍歷操作,有些數(shù)據(jù)結(jié)構(gòu)原生具備 Iterator 接口,比如Array、Map、Set、String等,而 Iterator 接口是部署在數(shù)據(jù)結(jié)構(gòu)的Symbol.iterator屬性上的,而對(duì)象Object恰恰是沒有Symbol.iterator屬性的,所以無(wú)法被for..of遍歷
filter(ES6)遍歷數(shù)組
filter(ES6)遍歷數(shù)組,過濾出符合條件的元素并返回一個(gè)新數(shù)組, 如果沒有任何數(shù)組元素通過測(cè)試,則返回空數(shù)組。
const result = words.filter(word => word.length > 6); console.log(result) //["exuberant", "destruction", "present"] some()函數(shù)(ES6) 遍歷數(shù)組中是否有符合條件的元素,返回值為Boolean值 這個(gè)它只要找到一個(gè)符合條件的,就返回 true。 var arr = [ { id: 1, name: '買筆', done: true }, { id: 2, name: '買筆記本', done: true }, { id: 3, name: '練字', done: false } ] var bool = arr.some(function (item, index) { return item.done }) console.log(bool) // true
every()函數(shù)(ES6)
測(cè)試數(shù)組的各個(gè)元素是否通過了回調(diào)函數(shù)的測(cè)試
若都通過,返回 true,否則返回 false
簡(jiǎn)單的說(shuō)就是如果回調(diào)函數(shù)每次返回的值都是 true 的話,則 every() 返回 true,否則為 false。
var arr = [ { id: 1, name: '買筆', done: true }, { id: 2, name: '買筆記本', done: true }, { id: 3, name: '練字', done: false } ] var bool = arr.every((item, index) => { return item.done }) console.log(bool) // false
find()函數(shù)(ES6)
返回第一個(gè)通過測(cè)試的元素,如果沒有通過測(cè)試的元素,則會(huì)返回**undefined**。
var arr = [1, 1, 2, 2, 3, 3, 4, 5, 6] var num = arr.find( (item, index) => { return item === 3 }) console.log(num) // 3
findIndex()函數(shù) (ES6)
這個(gè)函數(shù)與上面的find()作用一樣,就是它返回的值為該通過第一個(gè)元素的索引。
var arr = [1, 1, 2, 2, 3, 3, 4, 5, 6] var num = arr.findIndex(item => { return item === 3 }) console.log(num) // 4
到此這篇關(guān)于淺談JS數(shù)組內(nèi)置遍歷方法有哪些和區(qū)別的文章就介紹到這了,更多相關(guān)JS數(shù)組內(nèi)置遍歷內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
cookie丟失問題(認(rèn)證失效) Authentication (用戶驗(yàn)證信息)也會(huì)丟失
window.showModalDialog() 后 window.open() 導(dǎo)致cookie丟失問題(認(rèn)證失效) Authentication (用戶驗(yàn)證信息)也會(huì)丟失2009-06-06JavaScript學(xué)習(xí)小結(jié)之使用canvas畫“哆啦A夢(mèng)”時(shí)鐘
這篇文章主要介紹了JavaScript學(xué)習(xí)小結(jié)之使用canvas畫“哆啦A夢(mèng)”時(shí)鐘的相關(guān)資料,需要的朋友可以參考下2016-07-07微信小程序復(fù)選框?qū)崿F(xiàn)多選一功能過程解析
這篇文章主要介紹了微信小程序復(fù)選框?qū)崿F(xiàn)多選一功能過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02JavaScript數(shù)據(jù)類型學(xué)習(xí)筆記
這篇文章主要針對(duì)JavaScript數(shù)據(jù)類型整理的學(xué)習(xí)筆記,分享給大家,感興趣的小伙伴們可以參考一下2016-01-01JavaScript原生節(jié)點(diǎn)操作小結(jié)
本文主要介紹了JavaScript原生節(jié)點(diǎn)操作的相關(guān)知識(shí)。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-01-01學(xué)習(xí)drag and drop js實(shí)現(xiàn)代碼經(jīng)典之作
今天讀John Resig的Pro Javascript Techniques時(shí)候看到他書上給的一個(gè)關(guān)于drag and drop的例子, 合上書本自己寫一個(gè)簡(jiǎn)化版本的。大約20分鐘完成, 沒有考慮兼容firefox。整個(gè)代碼封裝成一個(gè)對(duì)象 也是借鑒書中的風(fēng)格。我覺得很好。2009-04-04JavaScript檢測(cè)實(shí)例屬性, 原型屬性
這篇文章主要介紹了JavaScript檢測(cè)實(shí)例屬性, 原型屬性,需要的朋友可以參考下2015-02-02