JavaScript基礎(chǔ)學習-數(shù)組中的常用遍歷方法

數(shù)組常用的遍歷方法

這幾個方法都不會改變原數(shù)組。這些方法只有在實際應(yīng)用中才能體會到它們的強大作用塑娇,這里只是羅列它們的一些知識點屹堰。

forEach() IE6-8不兼容

  • 用來遍歷數(shù)組中的每一項;
  • 參數(shù)
    • 1.回調(diào)函數(shù) forEach(function(item,index,list))
    • 2.上下文(改變回調(diào)函數(shù)中的this指向)
  • 返回值:沒有
  • 原有數(shù)組不會改變

理論上是沒有返回值的,僅僅是對數(shù)組進行遍歷刽宪,不會改變數(shù)組。但是可以通過索引來改變原有的值
無法直接退出循環(huán)界酒,只能使用return來達到for循環(huán)中continue的效果圣拄。

回掉函數(shù)中的作用

會傳遞三個參數(shù)

  • item 數(shù)組中的當前項
  • index 當前項的索引index
  • 原始數(shù)組 input

執(zhí)行次數(shù)

  • 數(shù)組中有幾項,那么傳遞進去的匿名回調(diào)函數(shù)就會執(zhí)行幾次

map() IE6-8不兼容

和forEach非常類似毁欣,但是map的回調(diào)函數(shù)中支持返回值:return的是啥庇谆,相當于把數(shù)組中的這一項變?yōu)樯?/p>

  • 該方法就支持返回值了∑敬可以理解為map是映射的關(guān)系饭耳,將一個數(shù)組中的每一項做一個轉(zhuǎn)換,結(jié)果生成一個新數(shù)組执解,并且新數(shù)組的長度和原數(shù)組一樣
  • 該方法可以應(yīng)用于改變原數(shù)組中的某一項寞肖,通過條件判斷替換掉原有項
  • 被替換的那一項,不一定是原來的數(shù)據(jù)類型衰腌⌒麦。可以隨意替換已有的數(shù)據(jù)類型。
  • 例如:將后臺傳遞過來的數(shù)據(jù)右蕊,生成HTML結(jié)構(gòu)琼稻,這時就可以舍棄字符串拼接∪那簦可以直接運用該方法帕翻,就每一項數(shù)據(jù)映射成一條HTML語句。
  • 在回調(diào)函數(shù)中坯约,如果沒有返回值熊咽,則得到的是undefined
  • 用法
    var num = 3;
var obj = {name:100};
var arr = [{name:1},{name:3},{name:2},{name:3}];
var newArr = arr.map(function (item,index) {//返回成一個新的數(shù)組
    if(item.name == num){ //如果當前項找到了,將最新的對象返回替換掉原有的
        return obj;
    }
    return item;
}); 

filter() 過濾 ES5

該方法可以看作是過濾闹丐,按照某規(guī)則提取出一些特定的項來横殴,生成一個新數(shù)組,但新數(shù)組的長度小于或等于原數(shù)組

  • callback將數(shù)組元素當參數(shù)傳入卿拴,并返回一個布爾值衫仑。當返回值為真時,該元素被假如到新的數(shù)組中堕花,否則就被過濾掉文狱,不會出現(xiàn)在新數(shù)組中。常用來當作刪除使用缘挽。
  • 瞄崇,根據(jù)已知的條件呻粹,把與已知條件相關(guān)的數(shù)據(jù)進行處理。在遍歷過程中苏研,如果找到與已知條件相符合的數(shù)據(jù)等浊,返回true 就是保留該數(shù)據(jù);返回false就是刪除數(shù)據(jù)摹蘑。執(zhí)行完該方法后筹燕,會返回一個新的數(shù)組,不改變原數(shù)組衅鹿。
  • 用法
    var num = 3;
var arr = [{name:1},{name:3},{name:2},{name:3}];
//filter 過濾 如果在filter函數(shù)中返回true表示保留撒踪,返回false刪除,
var newArr = arr.filter(function (item,index) {
    return item.name != num;
});
//會返回一個新的數(shù)組

find() 查找 ES6

find方法對數(shù)組中的每一項元素執(zhí)行一次callback函數(shù)大渤,直到有一個callback返回true制妄,就會停止執(zhí)行。意味著兼犯,只要找到符合條件的那一項忍捡,返回true。并把這一項的值返回切黔。就不再查找了

  • 該方法可以用來對一組數(shù)據(jù)中具有某個屬性值砸脊,進行判斷。如果整個數(shù)組有這個屬性值纬霞,將要做什么凌埂。只要有一個不是,又要做什么诗芜。例如瞳抓,購物車中的全選和非全選,只要有一個沒有被選中伏恐,全選的checkbox就不能打√孩哑,如果全都選中,就打上√
  • 用法
    //查詢(find)  findOne 查到一項后返回當前項 不繼續(xù)查找
var num = 3;
var arr = [{name:1},{name:3,age:100},{name:2},{name:3}];
//返回找到的那一項
var obj = arr.find(function (item,index) {
    //找到后返回true即可
    if(item.name ==num){
        return true;//返回true則會將當前item返回
    }
});

findIndex()es6

和find方法一樣翠桦,只是返回不一樣横蜒,find返回的當前符合條件的元素,而findIndex返回的是符合條件的元素的索引销凑。

every()方法

方法使用傳入的函數(shù)測試所有的元素丛晌,只要其中有一個函數(shù)返回值為false,那么該方法的結(jié)果為false;如果全部返回true斗幼,那么該方法的結(jié)果才為true.

some()方法

與every()方法正好相反澎蛛,some測試數(shù)組元素時,只要有一個函數(shù)返回值為true蜕窿,則該方法返回true谋逻,若全部返回false,則該方法返回false呆馁。

reduce()方法

reduce()方法接受一個方法作為累加器,數(shù)組中的每一值(從左到右)開始合并毁兆,最終為一個值

語法:arr.reduce(fn, initialValue)

fn 表示在數(shù)組每一項上執(zhí)行的函數(shù)智哀,接受四個參數(shù):

  • previousValue上一次調(diào)用回調(diào)返回的值,或者提供的初始值荧恍;
  • value數(shù)組中當前被處理元素的值
  • index當前元素在數(shù)組中的索引
  • array原數(shù)組

initialValue指定第一次調(diào)用fn的第一個參數(shù)。

當fn第一次執(zhí)行時:

  • 如果initialValue在調(diào)用reduce時被提供屯吊,那么第一個previousValue將等于initalValue,此時item等于數(shù)組中的第一值送巡;
  • 如果initailValue未提供,那么previousValue等于數(shù)組中的第一個值盒卸,item等于數(shù)組中的第二個值骗爆。此時如果數(shù)組為空,那么將拋出TypeError
  • 如果數(shù)組僅一個元素蔽介,并且沒有提供viitalValue摘投,或提供了initialValue但數(shù)組為空,那么fn不會被執(zhí)行虹蓄,數(shù)組的唯一值將被返回
  var ary = [3,4,5,6];
  var res = ary.reduce(function (pre,value,index,array) {
    return pre+value
},1);
console.log(res);// 19

const data = ['car', 'car', 'truck', 'truck', 'bike', 'walk', 'car', 'van', 'bike', 'walk', 'car', 'van', 'car', 'truck', 'pogostick'];
    const transportation = data.reduce(function(obj, item) {
        if (!obj[item]) {
            obj[item] = 0;
        }
        obj[item]++;
        return obj;
    }, {});
    console.log(transportation);

reduceRight

與reduce一致犀呼,只是累加的方向該為從右往左累加

entries(ES6)

返回一個數(shù)組迭代器對象,該對象包含數(shù)組中每個索引的鍵值對薇组;

語法:arr.entries()

var ary = [1,2,3,4,5];
var res = ary.entries();
console.log(res.next()); // { value: [ 0, 1 ], done: false }
console.log(res.next().value);// [ 1, 2 ]

keys(ES6)

返回一個數(shù)組索引的迭代器外臂,類似于entries,只是返回的都是索引律胀。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宋光,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子炭菌,更是在濱河造成了極大的恐慌罪佳,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件黑低,死亡現(xiàn)場離奇詭異赘艳,居然都是意外死亡,警方通過查閱死者的電腦和手機投储,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門第练,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人玛荞,你說我怎么就攤上這事娇掏。” “怎么了勋眯?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵婴梧,是天一觀的道長下梢。 經(jīng)常有香客問我,道長塞蹭,這世上最難降的妖魔是什么孽江? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮番电,結(jié)果婚禮上岗屏,老公的妹妹穿的比我還像新娘。我一直安慰自己漱办,他們只是感情好这刷,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著娩井,像睡著了一般暇屋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上洞辣,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天咐刨,我揣著相機與錄音,去河邊找鬼扬霜。 笑死定鸟,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的畜挥。 我是一名探鬼主播仔粥,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蟹但!你這毒婦竟也來了躯泰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤华糖,失蹤者是張志新(化名)和其女友劉穎麦向,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體客叉,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡诵竭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了兼搏。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卵慰。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖佛呻,靈堂內(nèi)的尸體忽然破棺而出裳朋,到底是詐尸還是另有隱情,我是刑警寧澤吓著,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布鲤嫡,位于F島的核電站送挑,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏暖眼。R本人自食惡果不足惜惕耕,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望诫肠。 院中可真熱鬧司澎,春花似錦、人聲如沸栋豫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽笼才。三九已至,卻和暖如春络凿,著一層夾襖步出監(jiān)牢的瞬間骡送,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工絮记, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留摔踱,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓怨愤,卻偏偏與公主長得像派敷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子撰洗,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

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