JavaScript數(shù)組:數(shù)組遍歷

數(shù)組遍歷
數(shù)組遍歷方法:forEach湃鹊,every荧呐,some,map痢虹,filter方法。

forEach:為數(shù)組中的每個(gè)元素調(diào)用定義的回調(diào)函數(shù)
every:檢查定義的回調(diào)函數(shù)是否為數(shù)組中的所有元素返回true
some:檢查定義的回調(diào)函數(shù)是否為數(shù)組的任何元素返回true
filter:每個(gè)數(shù)組項(xiàng)調(diào)用指定的函數(shù)主儡,條件滿足為true的將返回新的數(shù)組中
map:每個(gè)數(shù)組項(xiàng)調(diào)用指定的函數(shù)奖唯,返回每次調(diào)用的結(jié)果組成一個(gè)新數(shù)組

<code>forEach</code><code>every</code><code>some</code>方法不生成一個(gè)新數(shù)組,而<code>filter</code><code>map</code>方法將會生產(chǎn)一個(gè)符合條件的新數(shù)組糜值。這些方法都會調(diào)用指定的callbackfn丰捷∨髂回調(diào)函數(shù)語法如下:

forEach方法

語法:

array.forEach(callback[,thisArg]);

參數(shù)
callback為每個(gè)元素執(zhí)行,接受三個(gè)參數(shù):
currentValue 當(dāng)前值病往,數(shù)組正在處理的當(dāng)前元素捣染。
index 索引,數(shù)組正在處理的當(dāng)前元素的索引停巷。
array 正在應(yīng)用forEach()數(shù)組
thisArg 可選
當(dāng)執(zhí)行回調(diào)函數(shù)時(shí)作用this的值耍攘。

forEach方法按升序?yàn)閿?shù)組中含有效值的每一項(xiàng)執(zhí)行一次callback函數(shù),哪些已刪除或者從未賦值的項(xiàng)將被跳過叠穆,但不包括值為undefined的項(xiàng)少漆。

如果給forEach傳遞了thisArg參數(shù),它將作為callback函數(shù)執(zhí)行上下文硼被,類似執(zhí)行如下函數(shù)callback.call(thisArg,element,index,array)示损。如果thisArg值為undefined或null,函數(shù)的this值取決于當(dāng)前執(zhí)行環(huán)境是否為嚴(yán)格模式(嚴(yán)格模式為undefined嚷硫,非嚴(yán)格模式為全局對象)检访。
foreEach執(zhí)行一次callback函數(shù),總是返回undefined仔掸。

function logArrayElements(element,index,array){
  console.log("a["+index+"]="+element);
}
var returnValue=[2,,5,9].forEach(logArrayElements);//0 2 3
console.log(returnValue);undefined

//thisArg
function Counter(){
  this.sum = 0;
  this.count = 0;
}
Counter.prototype.add=function(array){
  array.forEach(function(entry){
    this.sum+=entry;
     ++this.count;
  })
}
var obj=new Counter();
obj.add([2,5,9]);
console.log(obj.count);
//polyfill
if(!Array.prototype.forEach){
    Array.prototype.forEach = function(callback, thisArg){
        var T,K;
        if(this == null){
            throw new TypeError(' this is null or defined');
        }
        console.log(this);
        var O = Object(this);
        // 2. Let lenValue be the result of calling the Get() internal
                // method of O with the argument "length".                      
                // 3. Let len be toUint32(lenValue).
        var len = O.length >>> 0;
        if(typeof callback !== 'function'){
            throw new TypeError(callback + 'is not a function');
        }
        if(arguments.length > 1){
            T = thisArg;
        }
        K = 0;

        while(K < len){
            var kValue;
            if(K in O){
                callback.call(T,kValue,K,O);
            }
            K++;
        }
  }
}
every方法

every方法測試數(shù)組的所有元素是否都通過了指定函數(shù)的測試脆贵。
every為每個(gè)數(shù)組中的每個(gè)元素執(zhí)行一次callback函數(shù),直到它找到一個(gè)始callback返回false的元素起暮。如果發(fā)現(xiàn)了這樣的元素卖氨,every方法就會立即返回false,否則callback為每個(gè)元素返回true负懦,every方法就返回true筒捺。
回調(diào)函數(shù)參數(shù)同forEach。

function checkNumber(element,index,array){
  return (element >= 10);
}
var passed=[1,11,5].every(checkNumber);
console.log(passed);//false
passed = [12, 54, 18, 130, 44].every(checkNumber);
console.log(passed);//true
//polyfill
if(!Array.prototype.every){
    Array.prototype.every = function(fun,thisArg){
        'use strict';
        if(this === void 0 || this === null ){
            throw new TypeError();
        }
        var t = Object(this);
        var len = t.length >>> 0;

        if( typeof fun !== 'function'){
            throw new TypeError();
        }

        var thisArg = arguments.length >=2 ? arguments[1] : void 0;
        for(var i = 0; i<len; i++ ){// in 操作符纸厉,當(dāng)對象為數(shù)組的時(shí)候 變量指的是數(shù)組的索引
            if(i in t && !fun.call(thisArg,t[i],i,t)){
                return false;
            }
        }
        return true;
    };
}
some方法

some 方法和every方法正好相反系吭,當(dāng)callback函數(shù)執(zhí)行返回true是,some方法立即返回true颗品。否則返回false肯尺。
實(shí)例同every類似。polyfill也和every類似躯枢,只是判斷情況返回的值和every正好相反则吟。

if (!Array.prototype.some){ 
        Array.prototype.some = function(fun /*, thisArg */) {
            'use strict'; 
            if (this === void 0 || this === null) throw new TypeError(); 
            var t = Object(this); 
            var len = t.length >>> 0; 
            if (typeof fun !== 'function') throw new TypeError(); 
            var thisArg = arguments.length >= 2 ? arguments[1] : void 0; 
            for (var i = 0; i < len; i++) { 
                if (i in t && fun.call(thisArg, t[i], i, t)){//注意此處的判斷條件就好
                    return true; 
                } 
            } 
            return false; 
        };
    }
map方法

map方法返回一個(gè)由元素組調(diào)用一個(gè)指定方法后的返回值組成的新數(shù)組。
需要注意的就是返回一個(gè)callback后的新數(shù)組锄蹂。

var numbers=[1,4,9]
var roots = numbers.map(Math.sqrt);
console.log(roots.join());//1,2,

map的其他實(shí)例

filter方法

filter方法使用指定的函數(shù)callback測試所有的元素逾滥,并創(chuàng)建一個(gè)包含所有通過測試的元素的新數(shù)組。

function isBigEnough( element ){
  return element >= 10;
}

var filtered = [12,5,8,130,44].filter(isBigEnough);
console.log(filtered.join(':'));//12:130:44
結(jié)

數(shù)組遍歷的五個(gè)方法 <code>forEach</code>、<code>every</code>寨昙、<code>some</code>讥巡、<code>map</code><code>filter</code>。其中forEach舔哪、every欢顷、some不會改變原數(shù)組,而map捉蚤、filter方法會根據(jù)指定的函數(shù)callback創(chuàng)建一個(gè)新數(shù)組抬驴。filter將符合callback條件創(chuàng)建一個(gè)新數(shù)組,map創(chuàng)建對原素組每一項(xiàng)執(zhí)行callback后的數(shù)組缆巧。every對每一項(xiàng)都符合的返回true布持,some對只要有一項(xiàng)符合的就返回true,否則返回false陕悬。

學(xué)習(xí)中可能有許多不對题暖,請指出。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末捉超,一起剝皮案震驚了整個(gè)濱河市胧卤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拼岳,老刑警劉巖枝誊,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異惜纸,居然都是意外死亡叶撒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進(jìn)店門耐版,熙熙樓的掌柜王于貴愁眉苦臉地迎上來祠够,“玉大人,你說我怎么就攤上這事椭更∧纳螅” “怎么了蛾魄?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵虑瀑,是天一觀的道長。 經(jīng)常有香客問我滴须,道長舌狗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任扔水,我火速辦了婚禮痛侍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己主届,他們只是感情好赵哲,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著君丁,像睡著了一般枫夺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上绘闷,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天橡庞,我揣著相機(jī)與錄音,去河邊找鬼印蔗。 笑死扒最,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的华嘹。 我是一名探鬼主播吧趣,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼除呵!你這毒婦竟也來了再菊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤颜曾,失蹤者是張志新(化名)和其女友劉穎纠拔,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泛豪,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡稠诲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了诡曙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片臀叙。...
    茶點(diǎn)故事閱讀 40,675評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖价卤,靈堂內(nèi)的尸體忽然破棺而出劝萤,到底是詐尸還是另有隱情,我是刑警寧澤慎璧,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布床嫌,位于F島的核電站,受9級特大地震影響胸私,放射性物質(zhì)發(fā)生泄漏厌处。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一岁疼、第九天 我趴在偏房一處隱蔽的房頂上張望阔涉。 院中可真熱鬧,春花似錦、人聲如沸瑰排。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽椭住。三九已至郭毕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間函荣,已是汗流浹背显押。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留傻挂,地道東北人乘碑。 一個(gè)月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像金拒,于是被迫代替她去往敵國和親兽肤。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評論 2 360

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