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

forEach

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

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

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

});

forEach只是對(duì)數(shù)組中的每一項(xiàng)運(yùn)行傳入的函數(shù),這個(gè)方法沒有返回值,對(duì)原來數(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ù)組中的每一項(xiàng)值的,用來遍歷數(shù)組中的每一項(xiàng);

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

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

兼容性寫法:

/**

* 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:?要對(duì)每個(gè)數(shù)組元素執(zhí)行的回調(diào)函數(shù)。

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

//過濾掉小于 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

功能說明:

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

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

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

filter 不會(huì)改變?cè)袛?shù)組,記住:只有在回調(diào)函數(shù)執(zhí)行前傳入的數(shù)組元素才有效,在回調(diào)函數(shù)開始執(zhí)行后才添加的元素將被忽略,而在回調(diào)函數(shù)開始執(zhí)行到最后一個(gè)元素這一期間,數(shù)組元素被刪除或者被更改的,將以回調(diào)函數(shù)訪問到該元素的時(shí)間為準(zhǔn),被刪除的元素將被忽略。

some():

對(duì)數(shù)組中的每個(gè)元素都執(zhí)行一次指定的函數(shù)(callback),直到此函數(shù)返回true,如果發(fā)現(xiàn)這個(gè)元素,some 將返回true,如果回調(diào)函數(shù)對(duì)每個(gè)元素執(zhí)行后都返回 false ,some 將返回false。它只對(duì)數(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():

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

//測(cè)試是否所有數(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ù)字,可以從任何一個(gè)位置開始循環(huán),但是for in循環(huán)不能設(shè)置,只能從第一個(gè)到最后一個(gè)進(jìn)行循環(huán))。

json只能用for in循環(huán),因?yàn)閖son的下標(biāo)是沒有規(guī)律的字符串,沒有l(wèi)ength。

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

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

一般不推薦遍歷數(shù)組,因?yàn)閒or in遍歷后的不能保證順序,而且原型鏈上的屬性也會(huì)被遍歷到,因此一般常用來遍歷非數(shù)組的對(duì)象并且使用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遍歷對(duì)象

循環(huán)遍歷對(duì)象的值,是遍歷鍵值對(duì)后面的那一個(gè)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

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

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

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

?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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

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