摘要:關(guān)于循環(huán)遍歷寫下這篇文章的目的,主要是想總結(jié)一下關(guān)于對(duì)于集合對(duì)象遍歷的方式方法,以及在實(shí)際應(yīng)用場(chǎng)景中怎樣去使用它們。的作用主要是去遍歷對(duì)象的可枚舉屬性。例如索引,數(shù)值打印結(jié)果為當(dāng)?shù)诙?xiàng)不滿足條件式跳出循環(huán),返回。
關(guān)于JS循環(huán)遍歷
寫下這篇文章的目的,主要是想總結(jié)一下關(guān)于JS對(duì)于集合對(duì)象遍歷的方式方法,以及在實(shí)際應(yīng)用場(chǎng)景中怎樣去使用它們。本文會(huì)主要介紹:while,for,forEach,every,some,filter,reduce,map,indexOf...
while/do whilewhile、do while主要的功能是,當(dāng)滿足while后邊所跟的條件時(shí),來執(zhí)行相關(guān)業(yè)務(wù)。這兩個(gè)的區(qū)別是,while會(huì)先判斷是否滿足條件,然后再去執(zhí)行花括號(hào)里面的任務(wù),而do while則是先執(zhí)行一次花括號(hào)中的任務(wù),再去執(zhí)行while條件,判斷下次還是否再去執(zhí)行do里面的操作。也就是說 do while至少會(huì)執(zhí)行一次操作,生產(chǎn)中這個(gè)就可能用的比較少了,因?yàn)樗c接下來要講的for循環(huán)相比,個(gè)人覺得可讀性上差了一點(diǎn)。
while(條件){ 執(zhí)行... } ------------ do{ 執(zhí)行... } while(條件)for
for (語句 1; 語句 2; 語句 3) { 被執(zhí)行的代碼塊 }
語句 1 在循環(huán)(代碼塊)開始前執(zhí)行
語句 2 定義運(yùn)行循環(huán)(代碼塊)的條件
語句 3 在循環(huán)(代碼塊)已被執(zhí)行之后執(zhí)行
這個(gè)就不贅述了,也比較好理解,主要聊一下for...in/for...of這兩個(gè)東西。
for...infor...in的作用主要是去遍歷對(duì)象的可枚舉屬性。即
var foo = { name: "bar", sex: "male" } Object.defineProperty(foo, "age", { value : 18}) for(var a in foo){ console.log(`可枚舉屬性:${a}`) } console.log(`age屬性:${foo.age}`)
因?yàn)镺bject.defineProperty,建立的屬性,默認(rèn)不可枚舉,因此在瀏覽器中打印的結(jié)果為:
在JS當(dāng)中,數(shù)組也算作對(duì)象,但一般不推薦把for...in用在數(shù)組遍歷上面,如果for...in普通數(shù)組的話,a返回?cái)?shù)組的索引。
for...offor...of是ES6新增的方法,主要作用是用來遍歷具有iterator接口的數(shù)據(jù)集合,除了ES5的Array,還有ES6新增的Map,Set等,但是for...of不能去遍歷普通的對(duì)象(普通對(duì)象不具備iterator接口),如果想去遍歷普通對(duì)象,可以使用generator函數(shù)去給普通對(duì)象先生成iterator接口。for...of的好處是可以使用break跳出循環(huán)。
every/some返回一個(gè)布爾值。當(dāng)我們需要判定數(shù)組中的元素是否滿足某些條件時(shí),可以使用every/some。這兩個(gè)的區(qū)別是,every會(huì)去判斷判斷數(shù)組中的每一項(xiàng),而some則是當(dāng)某一項(xiàng)滿足條件時(shí)返回。例如:
let foo=[5,1,3,7,4].every(function (item,index) { console.log(`索引:${index},數(shù)值:${item}`) return item>2 }) console.log(foo)
打印結(jié)果為:
當(dāng)?shù)诙?xiàng)不滿足條件式跳出循環(huán),返回false。
let foo=[5,1,3,7,4].some(function (item,index) { console.log(`索引:${index},數(shù)值:${item}`) return item>2 }) console.log(foo)
打印結(jié)果為:
當(dāng)數(shù)組的某項(xiàng)滿足條件時(shí)跳出循環(huán),返回true.
在按照約定條件篩選數(shù)組時(shí),every/some是非常方便的方法。
篩選出一個(gè)滿足相關(guān)條件的新數(shù)組。
let foo=[5,1,3,7,4].filter(function (item,index) { console.log(`索引:${index},數(shù)值:${item}`) return item>2 }) console.log(foo)
將滿足返回值條件的item組成一個(gè)新的數(shù)組。過濾器,顧名思義,比較好理解。在按照約定條件篩選數(shù)組元素時(shí),filter比較方便。
maplet foo=[5,1,3,7,4].map(function (item,index) { console.log(`索引:${index},數(shù)值:${item}`) return item+2 }) console.log(foo)
返回一個(gè)將每個(gè)元素進(jìn)行“二次加工”的新數(shù)組,map與filter都是返回一個(gè)新的數(shù)組,區(qū)別則是filter是將原數(shù)組,通過相關(guān)條件篩選出合法的item,來組成一個(gè)新的數(shù)組,而map則是將每個(gè)item通過再加工來返回一個(gè)新的數(shù)組。
reduce將數(shù)組元素做“疊加”處理,返回一個(gè)值。
let foo=[5,1,3,7,4].reduce(function (pre,cur) { console.log(`索引:${pre},數(shù)值:${cur}`) return pre+cur }) console.log(foo)
打印結(jié)果為:
pre為累加值,cur為當(dāng)前值。reduce函數(shù)值得注意的是,reduce(fn,init)第二個(gè)參數(shù),可以傳一個(gè)初始值,如果代碼改成這樣:
let foo=[5,1,3,7,4].reduce(function (pre,cur) { console.log(`索引:${pre},數(shù)值:${cur}`) return pre+cur },"") console.log(foo)
則為:
返回指定字符串首次出現(xiàn)的位置
let foo=["57","17","37","7","4"].indexOf("7") console.log(foo)
這個(gè)函數(shù)比較常用的應(yīng)用場(chǎng)景是,在做if判斷時(shí),可以代替||,&&等關(guān)系符。比如:
可以代替
if(value=="next"||value=="pre")的這種寫法,當(dāng)判斷元素較多時(shí),這種寫法比較劃算。
個(gè)人非常喜歡filter/map/reduce,但是看到身邊的同學(xué)一言不合就foreach,替這三個(gè)函數(shù)心疼幾秒。。。不過低版本瀏覽器也確實(shí)不支持這些函數(shù)。。。根據(jù)自己需要去選擇合適的遍歷方式可以大大提升效率。哦耶
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/86963.html
摘要:如圖遍歷數(shù)組遍歷數(shù)組元素并以某種方式處理每個(gè)元素是一個(gè)常見的操作。如圖不過,里的功能比較強(qiáng)大,可以遍歷而且返回值是的則被省略掉總結(jié)遍歷對(duì)象,遍歷出來的是鍵名,而不是鍵值,參數(shù)必須是對(duì)象。 可能是由于職業(yè)的關(guān)系,下班之后完全不想Open PC,但很多知識(shí)點(diǎn)有必要自己做個(gè)小小總結(jié)。本人之前對(duì)原生Array和Object完全沒概念。 遍歷對(duì)象的方法: Object.keys(Object)...
摘要:希望索引值之間用隔開,而最后的索引值后面無。優(yōu)化代碼這個(gè)判斷用于防止最后一個(gè)索引值后面還有結(jié)果查看其實(shí)用來跳出循環(huán)一直覺得不太規(guī)范。。。小實(shí)驗(yàn)是顯示次數(shù)其實(shí)就是那個(gè)索引值啦,這次顯示的是字符哦涉及到字符,就要用到方法。 第一篇技術(shù)文章寫些簡(jiǎn)單點(diǎn)的~在大三上web前端開發(fā)課程時(shí),雖然能用JavaScript制作一些簡(jiǎn)單的頁面動(dòng)態(tài)效果,但其實(shí)很多JS知識(shí)并未掌握,所以自己又通過視頻再?gòu)?fù)習(xí)一...
摘要:語法參數(shù)當(dāng)前遍歷項(xiàng)。遍歷的范圍在第一次調(diào)用前就會(huì)確定。已刪除的項(xiàng)不會(huì)被遍歷到。的是由提出的,目的是作為遍歷所有數(shù)據(jù)結(jié)構(gòu)的統(tǒng)一方法。不僅可以遍歷數(shù)組,還可以遍歷結(jié)構(gòu),某些類似數(shù)組的對(duì)象如對(duì)象對(duì)象,對(duì)象,以及字符串。 即使是最簡(jiǎn)單的循環(huán),其中也深藏學(xué)問 ECMAScript5(es5)有三種for循環(huán) 簡(jiǎn)單for for in forEach ECMAScript6(es6)新增 fo...
摘要:從后端返回的數(shù)據(jù)中,有時(shí)候你會(huì)遇到一堆的,然后每個(gè)后面都跟有一個(gè)按鈕,就像這種情況其中有兩個(gè)問題,在一個(gè)框里面輸入值,然后所有的值都都會(huì)顯示你輸入的結(jié)果每個(gè)輸入框點(diǎn)擊能控制所有的而不只是它前面的那一個(gè)其實(shí)解決也不復(fù)雜,主要是運(yùn)用到了循環(huán)以及 從后端返回的數(shù)據(jù)中,有時(shí)候你會(huì)遇到一堆的input,然后每個(gè)input后面都跟有一個(gè)按鈕,就像這種情況showImg(https://segmen...
摘要:語法為回調(diào)函數(shù)擁有兩個(gè)參數(shù)第一個(gè)為對(duì)象的成員或數(shù)組的索引,第二個(gè)為對(duì)應(yīng)變量或內(nèi)容。但是對(duì)于的函數(shù),如果需要退出循環(huán)可使回調(diào)函數(shù)返回,其它返回值將被忽略。 JavaScript 專題系列第十一篇,講解 jQuery 通用遍歷方法 each 的實(shí)現(xiàn) each介紹 jQuery 的 each 方法,作為一個(gè)通用遍歷方法,可用于遍歷對(duì)象和數(shù)組。 語法為: jQuery.each(object,...
閱讀 1486·2021-09-28 09:44
閱讀 2562·2021-09-28 09:36
閱讀 1249·2021-09-08 09:35
閱讀 2010·2019-08-29 13:50
閱讀 850·2019-08-29 13:29
閱讀 1164·2019-08-29 13:15
閱讀 1756·2019-08-29 13:00
閱讀 3033·2019-08-26 16:16