日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

細(xì)說JS數(shù)組遍歷的一些細(xì)節(jié)及實(shí)現(xiàn)

瀏覽:232日期:2022-06-09 14:43:43
目錄
  • 1. 數(shù)組空位問題 ?
    • 1.1 空位判斷 ?
    • 1.2 剛列舉了數(shù)組的一些操作會(huì)對(duì)空位進(jìn)行跳過,但其實(shí),它們?cè)谔幚砩弦策€是存在一些差異的
  • 2. 是否修改原數(shù)組 ?
    • 3. 附一下數(shù)組遍歷的幾種方法 ?
      • 3.1 索引訪問 ?
      • 3.2 for ... of ?
      • 3.3 forEach ?
      • 3.4 for ... in ?
      • 3.5 map、filter、reduce ?

    1. 數(shù)組空位問題 ?

    數(shù)組空位是什么,它是數(shù)組內(nèi)某個(gè)元素沒有任何值,這種現(xiàn)象稱為空位現(xiàn)象,我們?cè)谑褂肁rray()去構(gòu)造一個(gè)數(shù)組時(shí),如果只傳入一個(gè)參數(shù),數(shù)組里面的元素項(xiàng)就會(huì)出現(xiàn)空位現(xiàn)象,它其實(shí)是沒有任何元素的,下面是幾個(gè)會(huì)創(chuàng)建空位的典型例子:

    let arr = Array(5) // <5 empty items>
    let res = arr.map(e => e + 1) // <5 empty items>
    let a = [,,]; // <2 empty items>

    ES5 中的數(shù)組方法包括:map、filter、forEach、reduce,還有 for ... in 等語法,這些方法執(zhí)行的時(shí)候遇到空位,會(huì)直接跳過。

    // ES5 及以前,不會(huì)處理空位
    const a = Array(5);
    console.log(a) // [ <5 empty items> ]
    console.log(a.map(_ => 1)) // 無效,[ <5 empty items> ]
    // console.log(a.reduce((p, c)=> p+c)) // 報(bào)錯(cuò)
    console.log(a.filter(x => true)) // []
    a.forEach(e => {
      console.log(e);
    }) // 無任何輸出
    console.log(a+"") // ,,,,
    console.log(a.indexOf(undefined)) // -1
    console.log(a.lastIndexOf(undefined)) // -1
    for (let k in a) {
      console.log(k) // 無任何輸出
    }

    ES5中將空位視為undefined的有:join(),toString()

    [,"a","b",undefined,null].join("@") // "@a@b@@"
    [,"a","b",undefined,null].toString() // ",a,b,,"

    ES6,一些操作會(huì)將數(shù)組空位視為undefined來處理。比如下面的一些操作

    console.log([...a]) // [ undefined x 5 ]
    console.log(Array.from(a)) // [ undefined x 5 ]
    console.log(a.includes(undefined)) // true
    console.log(a.find(x => x === undefined)) // undefined
    console.log(a.findIndex(x => x === undefined)) // 0
    // for of 循環(huán)取值
    for (let k of a) {
      console.log(k) // 輸出5個(gè)undefined
    }

    1.1 空位判斷 ?

    我們可以使用in運(yùn)算符來判斷數(shù)組某個(gè)位置是否存在空位

    let arr = Array(3) console.log(0 in arr) // false

    如上述所示,使用in運(yùn)算符,判斷索引為0的位置是否為空位,遇到數(shù)組空位會(huì)返回false
    這里需要注意的是所謂的空位是沒有任何值的,undefined、null它們都不屬于空位,下面來判斷一下。

    let arr = [undefined, null];
    console.log(0 in arr) // true
    console.log(1 in arr) // true

    驗(yàn)證了undefined、null所在的位置它不是空位

    1.2 剛列舉了數(shù)組的一些操作會(huì)對(duì)空位進(jìn)行跳過,但其實(shí),它們?cè)谔幚砩弦策€是存在一些差異的

    比如:forEach、filter、some與every等在遇到空位時(shí),會(huì)直接跳過它,不會(huì)保留它的值, 而map則會(huì)保留空位
    我們來看下例子:

    [,1,2].forEach((x,i) => { console.log(i); }) // 這里只會(huì)輸出1 2
    [,1,2].filter((x,i) => { return x > 0; }) // 這里也只會(huì)輸出[1, 2]
    [,1,2].map((x) => { return x > 0; }) // 這里會(huì)輸出[空, true, true],它保留了空位

    其余的可以自行測(cè)試看看結(jié)果

    2. 是否修改原數(shù)組 ?

    請(qǐng)看以下代碼,遍歷過程中,試圖修改遍歷的每一項(xiàng)。

    const arr = [1, 2, 3]
    let res = arr.filter(item => {
      item++
      return item >= 3
    })
    console.log(arr) // [ 1, 2, 3 ]
    console.log(res) // [ 2, 3 ]

    filter 里的 item 自增了,所以最后有兩項(xiàng)符合過濾規(guī)則,但是原數(shù)組并沒有變。這說明這里的 item 只是原數(shù)組項(xiàng)的一個(gè)值拷貝,數(shù)組遍歷是按值傳遞的。
    再看一段代碼,這次我們遍歷引用數(shù)據(jù)類型的數(shù)組。

    const brr = [
      {count: 1},
      {count: 1},
      {count: 1}
    ]
    const res2 = brr.map(item => {
      item.count++
      return item.count
    })
    console.log(brr) // [ { count: 2 }, { count: 2 }, { count: 2 } ]
    console.log(res2) // [ 2, 2, 2 ]

    這里的修改改變了原數(shù)組,那之前說的按值傳遞有問題?其實(shí)還沒問題的,數(shù)組函數(shù)方法說到底也是一個(gè)函數(shù),JS 的函數(shù)總是按值傳遞的:

    基本數(shù)據(jù)類型(包含變量、函數(shù)參數(shù)等)存儲(chǔ)在棧(stack)中,傳遞參數(shù)會(huì)復(fù)制一份值
    引用數(shù)據(jù)類型的引用(指針)存儲(chǔ)在棧中,指向的值存儲(chǔ)在堆(heap)中,傳遞參數(shù)會(huì)復(fù)制一份對(duì)象的引用地址,復(fù)制的引用地址和原引用地址指向堆中同一個(gè)對(duì)象(因此修改參數(shù),也修改了原對(duì)象)

    3. 附一下數(shù)組遍歷的幾種方法 ?

    3.1 索引訪問 ?

    const arr = [1, 2, 3]
    for (let i = 0; i < arr.length; i++) {
      console.log(arr[i])
    }

    3.2 for ... of ?

    const arr = [1, 2, 3]
    for (let e of arr) {
      console.log(e)
    }

    3.3 forEach ?

    注意:return 和 break 無法中斷遍歷。

    • return 可以跳過本次遍歷,但剩余元素仍然會(huì)繼續(xù)遍歷下去。
    • break 只能中斷 for 和 while 循環(huán),forEach 函數(shù)中使用會(huì)報(bào)錯(cuò)
    const arr = [1, 2, 3]
    arr.forEach((e, i, a) => {
    console.log(e)
    })

    3.4 for ... in ?

    `for ... in` 是用來遍歷對(duì)象(plain object)的,也可以用來遍歷數(shù)組,但不建議。

    const arr = [1, 2, 3]
    for (let i in arr) {
      console.log(arr[i])
    }

    3.5 map、filter、reduce ?

    這三類都是為了對(duì)數(shù)組進(jìn)行一個(gè)操作,然后得到目標(biāo)結(jié)果的數(shù)組方法,從功能和語義上來講,和 forEach 有區(qū)別的,不建議混用,尤其是 map 和 forEach。但是也能對(duì)數(shù)組進(jìn)行遍歷,詳細(xì)可參考MDN。

    到此這篇關(guān)于細(xì)說JS數(shù)組遍歷的一些細(xì)節(jié)及實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)JS數(shù)組遍歷內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

    標(biāo)簽: JavaScript
    相關(guān)文章:
    日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
    精品丝袜在线| 天堂成人国产精品一区| 日本精品在线播放| 亚洲精品在线国产| 综合五月婷婷| 亚洲aa在线| 日本91福利区| 国产精品一区高清| 麻豆精品蜜桃视频网站| 成人高清一区| 蜜臀久久精品| 色网在线免费观看| 亚洲高清av| 亚洲视频国产| 日本欧美一区二区| 麻豆精品新av中文字幕| а√天堂8资源中文在线| 日本韩国欧美超级黄在线观看| 亚洲手机视频| 免费成人在线观看| 国产伦理一区| 欧美激情另类| 99在线观看免费视频精品观看| 一区二区国产在线观看| 日本特黄久久久高潮| 精品九九在线| 久久精品亚洲欧美日韩精品中文字幕| 99国产精品自拍| 日韩av网站免费在线| 成人午夜亚洲| 91久久视频| 国产日韩欧美在线播放不卡| 成人一区不卡| 亚洲欧美网站| 国产精品a级| 亚洲国产影院| 欧美在线看片| 欧美日韩在线播放视频| 天堂久久一区| 日韩高清欧美| 亚洲影视一区二区三区| 国产精品igao视频网网址不卡日韩| 日本免费一区二区三区四区| 最新国产精品久久久| 国产理论在线| 综合一区二区三区| 三级在线看中文字幕完整版| 亚洲乱码视频| 日韩在线高清| 日本午夜精品久久久久| 91精品一区二区三区综合在线爱| 亚洲aa在线| 999国产精品视频| 日韩国产在线观看| 亚洲不卡系列| 国产精品视频一区二区三区四蜜臂| 中文字幕在线视频久| 综合日韩在线| 久久精品123| 69堂精品视频在线播放| 久久影视一区| 精品香蕉视频| 免费在线观看精品| 成人精品国产亚洲| 日本亚洲视频| 亚洲二区精品| 久久久国产精品入口麻豆| 国产精品美女久久久| 国产极品模特精品一二| 夜夜嗨网站十八久久| 成人日韩av| 涩涩涩久久久成人精品| 日韩激情av在线| 久久高清国产| 久久国内精品| 色一区二区三区| 另类亚洲自拍| 人人精品亚洲| 欧美国产先锋| 久久麻豆精品| 国产精品一在线观看| 999久久久国产精品| 日韩成人午夜精品| 在线日韩视频| 日韩在线观看中文字幕| 中文欧美日韩| 亚洲女同av| 麻豆精品视频在线观看免费| 国产成人免费| 国产美女撒尿一区二区| 好吊视频一区二区三区四区| 日韩一区精品视频| 国产精品99久久精品| 成人福利视频| 欧美aⅴ一区二区三区视频| 夜夜嗨一区二区| 成人在线网站| 日本不良网站在线观看| 久久伊人国产| 国产欧美亚洲精品a| 亚洲精品无播放器在线播放| 久久要要av| 日韩欧美中文| 欧美www视频在线观看| 欧美交a欧美精品喷水| 日韩国产成人精品| 丝袜亚洲另类欧美| 亚洲欧美日韩精品一区二区| 精品一区免费| 久久影院一区| 欧美日韩在线网站| 亚洲天堂免费电影| 国产+成+人+亚洲欧洲在线| 国产精品115| 久久不卡国产精品一区二区| 久久99视频| 精品视频国内| 美女视频黄免费的久久| 国产精品麻豆成人av电影艾秋| 日韩av成人高清| 啪啪亚洲精品| 国产亚洲一区二区三区不卡| 久久国产乱子精品免费女| 久久黄色影视| 精品国产亚洲一区二区三区大结局| 老鸭窝一区二区久久精品| 国产精品久久久久久妇女| 国产精品4hu.www| 国产aa精品| 成人看片网站| 黄色成人91| 亚洲一区黄色| 亚洲制服少妇| 日韩精品欧美大片| 欧美一级一区| 精品淫伦v久久水蜜桃| 成人精品动漫一区二区三区| 五月激情久久| 99热精品在线| 婷婷亚洲成人| 国产极品嫩模在线观看91精品| 久久久久九九精品影院| 日韩欧美一区二区三区免费看| 久久视频精品| 免费的成人av| 国产精品久久久久久久久久齐齐 | 99日韩精品| 深夜日韩欧美| 久久精品伊人| 99视频精品全国免费| 久久av在线| 欧美永久精品| 正在播放日韩精品| 99亚洲视频| 国产欧美一级| 成人台湾亚洲精品一区二区 | 日韩中文在线电影| 欧美色图一区| 日韩中文av| 97国产精品| 鲁大师影院一区二区三区| 国产免费久久| 欧美日中文字幕| 日韩精品成人| 成年男女免费视频网站不卡| 成人亚洲欧美| 四虎影视精品| 亚洲一二av| 国产精品玖玖玖在线资源| 天堂中文在线播放| 蜜臀精品一区二区三区在线观看| 国产欧美日韩一级| 欧美日韩免费观看视频| 一区二区精品| 国产一区二区三区日韩精品 | 亚洲精选91| 动漫av一区| 亚洲欧美视频一区二区三区| 久久爱www.| 91精品福利| 国产欧美日韩在线一区二区| 日韩亚洲一区在线| 日韩二区在线观看| 欧美色图国产精品| 国产精品三p一区二区| 国户精品久久久久久久久久久不卡| 日韩av资源网| 激情久久久久久久| 另类小说一区二区三区| 在线亚洲免费| 国产精品二区不卡| 午夜亚洲福利| 私拍精品福利视频在线一区| 久久国内精品自在自线400部| 国产91精品对白在线播放| 国产欧美激情| 一区二区视频欧美| 精品国产欧美| 青草av.久久免费一区| 亚洲网站视频|