js常用循環(huán)方法小結(jié)

forEach

myArray.forEach(function(value){ console.log(value);});

實際上forEach有三個參數(shù)? 分別為? 值? 下標(biāo)? 數(shù)組本身 于是我們有

[].forEach(function(value, index, array) {

});

forEach只是對數(shù)組中的每一項運行傳入的函數(shù)锅知,這個方法沒有返回值阔拳,對原來數(shù)組也沒有影響口锭,但是我們可以自己通過數(shù)組的索引來修改原來的數(shù)組,本質(zhì)上與for迭代數(shù)組一樣裂七。forEach不好用?你不能使用break語句中斷循環(huán),也不能使用return語句返回到外層函數(shù)仓坞。

兼容性寫法:

/**

* forEach遍歷數(shù)組

* @param callback [function] 回調(diào)函數(shù)背零;

* @param context [object] 上下文;

*/

Array.prototype.myForEach =functionmyForEach(callback,context){

????????context = context || window;

????????if('forEach'inArray.prototye) {

????????this.forEach(callback,context);

????????return;

????????}

????//IE6-8下自己編寫回調(diào)函數(shù)執(zhí)行的邏輯

????for(vari = 0,len =this.length; i < len;i++) {

????????callback && callback.call(context,this[i],i,this);

????}

}

map

varary = [12,23,24,42,1];

varres = ary.map(function(item,index,input) {

returnitem*10;

})

console.log(res);//-->[120,230,240,420,10];

console.log(ary);//-->[12,23,24,42,1]

map和forEach非常相似无埃,都是用來遍歷數(shù)組中的每一項值的徙瓶,用來遍歷數(shù)組中的每一項;

map的回調(diào)函數(shù)中支持return返回值嫉称;return的是啥侦镇,相當(dāng)于把數(shù)組中的這一項變?yōu)樯叮ú⒉挥绊懺瓉淼臄?shù)組,只是相當(dāng)于把原數(shù)組克隆一份织阅,把克隆的這一份的數(shù)組中的對應(yīng)項改變了)壳繁;

不管是forEach還是map 都支持第二個參數(shù)值,第二個參數(shù)的意思是把匿名回調(diào)函數(shù)中的this進行修改荔棉。

兼容性寫法:

/**

* map遍歷數(shù)組

* @param callback [function] 回調(diào)函數(shù)闹炉;

* @param context [object] 上下文;

*/

Array.prototype.myMap =functionmyMap(callback,context){

????????context = context || window;

????????if('map'inArray.prototye) {

????????returnthis.map(callback,context);

????}

????//IE6-8下自己編寫回調(diào)函數(shù)執(zhí)行的邏輯

????varnewAry = [];

????for(vari = 0,len =this.length; i < len;i++) {

????????if(typeofcallback ==='function') {

????????varval = callback.call(context,this[i],i,this);

????????newAry[newAry.length] = val;

????????}

????}

returnnewAry;

}

filter():

語法:

varfilteredArray = array.filter(callback[, thisObject]);

參數(shù)說明:

callback:?要對每個數(shù)組元素執(zhí)行的回調(diào)函數(shù)江耀。

thisObject :?在執(zhí)行回調(diào)函數(shù)時定義的this對象剩胁。

//過濾掉小于 10 的數(shù)組元素:

//代碼:

function isBigEnough(element, index, array) {

return (element >= 10);

}

var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);

// 12, 130, 44

//結(jié)果:[12, 5, 8, 130, 44].filter(isBigEnough) : 12, 130, 44

功能說明:

對數(shù)組中的每個元素都執(zhí)行一次指定的函數(shù)(callback)诉植,并且創(chuàng)建一個新的數(shù)組祥国,該數(shù)組元素是所有回調(diào)函數(shù)執(zhí)行時返回值為 true 的原數(shù)組元素。它只對數(shù)組中的非空元素執(zhí)行指定的函數(shù)晾腔,沒有賦值或者已經(jīng)刪除的元素將被忽略舌稀,同時,新創(chuàng)建的數(shù)組也不會包含這些元素灼擂。

回調(diào)函數(shù)可以有三個參數(shù):當(dāng)前元素壁查,當(dāng)前元素的索引和當(dāng)前的數(shù)組對象。

如參數(shù)thisObject被傳遞進來剔应,它將被當(dāng)做回調(diào)函數(shù)(callback)內(nèi)部的 this 對象睡腿,如果沒有傳遞或者為null,那么將會使用全局對象峻贮。

filter 不會改變原有數(shù)組席怪,記住:只有在回調(diào)函數(shù)執(zhí)行前傳入的數(shù)組元素才有效纤控,在回調(diào)函數(shù)開始執(zhí)行后才添加的元素將被忽略挂捻,而在回調(diào)函數(shù)開始執(zhí)行到最后一個元素這一期間,數(shù)組元素被刪除或者被更改的船万,將以回調(diào)函數(shù)訪問到該元素的時間為準(zhǔn)刻撒,被刪除的元素將被忽略骨田。

some():

對數(shù)組中的每個元素都執(zhí)行一次指定的函數(shù)(callback),直到此函數(shù)返回true声怔,如果發(fā)現(xiàn)這個元素态贤,some 將返回true,如果回調(diào)函數(shù)對每個元素執(zhí)行后都返回 false 捧搞,some 將返回false抵卫。它只對數(shù)組中的非空元素執(zhí)行指定的函數(shù),沒有賦值或者已經(jīng)刪除的元素將被忽略胎撇。

//檢查是否有數(shù)組元素大于等于10:

function isBigEnough(element, index, array) {

return (element >= 10);

}

var passed = [2, 5, 8, 1, 4].some(isBigEnough);

// passed is false

passed = [12, 5, 8, 1, 4].some(isBigEnough);

// passed is true

//結(jié)果:

//[2, 5, 8, 1, 4].some(isBigEnough) : false

//[12, 5, 8, 1, 4].some(isBigEnough) : true

every():

對數(shù)組中的每個元素都執(zhí)行一次指定的函數(shù)(callback)介粘,直到此函數(shù)返回false,如果發(fā)現(xiàn)這個元素晚树,every 將返回false姻采,如果回調(diào)函數(shù)對每個元素執(zhí)行后都返回 true ,every 將返回true爵憎。它只對數(shù)組中的非空元素執(zhí)行指定的函數(shù)慨亲,沒有賦值或者已經(jīng)刪除的元素將被忽略。

//測試是否所有數(shù)組元素都大于等于10:

function isBigEnough(element, index, array) {

return (element >= 10);

}

var passed = [12, 5, 8, 130, 44].every(isBigEnough);

// passed is false

passed = [12, 54, 18, 130, 44].every(isBigEnough);

// passed is true

//結(jié)果:

//[12, 5, 8, 130, 44].every(isBigEnough) 返回 : false

//[12, 54, 18, 130, 44].every(isBigEnough) 返回 : true

for...in...和for

數(shù)組既可以用for循環(huán)宝鼓,也可以用for in循環(huán)(區(qū)別:for循環(huán)可以設(shè)置i的開始數(shù)字刑棵,可以從任何一個位置開始循環(huán),但是for in循環(huán)不能設(shè)置愚铡,只能從第一個到最后一個進行循環(huán))蛉签。

json只能用for in循環(huán),因為json的下標(biāo)是沒有規(guī)律的字符串沥寥,沒有l(wèi)ength碍舍。

所以,一般數(shù)組就用for循環(huán)邑雅,json用for in循環(huán)片橡。

循環(huán)遍歷對象的key,是鍵值對前面的那一個哦

一般不推薦遍歷數(shù)組淮野,因為for in遍歷后的不能保證順序捧书,而且原型鏈上的屬性也會被遍歷到,因此一般常用來遍歷非數(shù)組的對象并且使用hasOwnProperty()方法去過濾掉原型鏈上的屬性

var myArry =[1,2,3,4];

myArry.desc ='four';

for(var value in myArry){ //循環(huán)key

console.log(value)

}

//"0"

//"1"

//"2"

//"3"

//"desc" 注意這里添加上去的屬性也被遍歷出來了

for of遍歷對象

循環(huán)遍歷對象的值骤星,是遍歷鍵值對后面的那一個value哦 经瓷,與for in遍歷key相反

var myArry =[1,2,3,4];

myArry.desc ='four';

for(var value of myArry){

console.log(value)

}

//1

//2

//3

//4

這是最簡潔、最直接的遍歷數(shù)組元素的語法

這個方法避開了for-in循環(huán)的所有缺陷

與forEach()不同的是妈踊,它可以正確響應(yīng)break了嚎、continue和return語句

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子歪泳,更是在濱河造成了極大的恐慌萝勤,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呐伞,死亡現(xiàn)場離奇詭異敌卓,居然都是意外死亡,警方通過查閱死者的電腦和手機伶氢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門趟径,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人癣防,你說我怎么就攤上這事蜗巧。” “怎么了蕾盯?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵幕屹,是天一觀的道長。 經(jīng)常有香客問我级遭,道長望拖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任挫鸽,我火速辦了婚禮说敏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘丢郊。我一直安慰自己盔沫,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布蚂夕。 她就那樣靜靜地躺著迅诬,像睡著了一般腋逆。 火紅的嫁衣襯著肌膚如雪婿牍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天惩歉,我揣著相機與錄音等脂,去河邊找鬼。 笑死撑蚌,一個胖子當(dāng)著我的面吹牛上遥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播争涌,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼粉楚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起模软,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤伟骨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后燃异,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體携狭,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年回俐,在試婚紗的時候發(fā)現(xiàn)自己被綠了逛腿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡仅颇,死狀恐怖单默,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情忘瓦,我是刑警寧澤雕凹,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站政冻,受9級特大地震影響枚抵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜明场,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一汽摹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧苦锨,春花似錦逼泣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至秃励,卻和暖如春氏仗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背夺鲜。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工皆尔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人币励。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓慷蠕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親食呻。 傳聞我的和親對象是個殘疾皇子流炕,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,654評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Javascript有很多數(shù)組的方法澎现,有的人有W3C的API,還可以去MDN上去找每辟,但是我覺得API上說的不全昔头,M...
    頑皮的雪狐七七閱讀 4,081評論 0 6
  • 創(chuàng)建數(shù)組 arr.length--- title: js正則表達式categories: javascriptda...
    angelwgh閱讀 1,392評論 0 2
  • 1.JQuery 基礎(chǔ) 改變web開發(fā)人員創(chuàng)造搞交互性界面的方式。設(shè)計者無需花費時間糾纏JS復(fù)雜的高級特性。 1....
    LaBaby_閱讀 1,335評論 0 2
  • 1.JQuery 基礎(chǔ) 改變web開發(fā)人員創(chuàng)造搞交互性界面的方式。設(shè)計者無需花費時間糾纏JS復(fù)雜的高級特性第焰。 1....
    LaBaby_閱讀 1,171評論 0 1
  • 放眼寰球誰爭先,金鑾殿前屬榜眼讹开。 悟空一躍十八萬,從此天宮墜凡間捐名。 捷報頻傳心莫醉旦万,盛世仍需再向前。 復(fù)請神女來做...
    垚君閱讀 202評論 0 1