• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    JavaScript數組方法的錯誤使用例子

    來源:懂視網 責編:小采 時間:2020-11-27 22:07:47
    文檔

    JavaScript數組方法的錯誤使用例子

    JavaScript數組方法的錯誤使用例子:1. 不要使用Array.indexOf,使用Array.includes 如果你要在數組中查找元素,使用Array.indexOf。記得在我學習JavaScript課程時候,有這樣一句話。這句話沒錯,確實可以這么使用! 根據MDN文檔:Array.indexOf會返回被查找元素第一個匹配
    推薦度:
    導讀JavaScript數組方法的錯誤使用例子:1. 不要使用Array.indexOf,使用Array.includes 如果你要在數組中查找元素,使用Array.indexOf。記得在我學習JavaScript課程時候,有這樣一句話。這句話沒錯,確實可以這么使用! 根據MDN文檔:Array.indexOf會返回被查找元素第一個匹配

    1. 不要使用Array.indexOf,使用Array.includes

    “如果你要在數組中查找元素,使用Array.indexOf!”。記得在我學習JavaScript課程時候,有這樣一句話。這句話沒錯,確實可以這么使用!

    根據MDN文檔:“Array.indexOf會返回被查找元素第一個匹配的位置的下標。”因此,如果后面需要用到這個索引,Array.indexOf是一個很好的解法。但是,我們要解決的問題是:查找數組中是否包含某個元素。這是一個Yes/No的問題,是一個返回布爾類型的真假問題。因此,我建議使用Array.includes,它會返回一個布爾值。

    'use strict';
    const characters = [
     'ironman',
     'black_widow',
     'hulk',
     'captain_america',
     'hulk',
     'thor',
    ];
    console.log(characters.indexOf('hulk'));
    // 2
    console.log(characters.indexOf('batman'));
    // -1
    console.log(characters.includes('hulk'));
    // true
    console.log(characters.includes('batman'));
    // false

    2. 不要使用Array.filter,使用Array.find

    Array.filter是一個很有用的函數,它返回一個滿足過濾條件的新數組。正如其名字表達的含義,它是用來做過濾的。

    但是,如果我們知道我們要的結果只有一個元素的時候,我就不建議使用它了。比如,如果我們的回調函數定義用一個唯一的ID來過濾,那么結果必然唯一了。在這個情況下,Array.filter會返回只有一個元素的數組。因為既然能通過一個特定的ID來查找,我們已經確定只有一個元素了,那么使用數組就沒有意義。

    另外,我們再來聊聊性能問題。為了返回所有匹配的元素,Array.filter需要查找整個數組。可以想象一下,如果有上百個元素滿足過濾條件,那么返回的數組就很大。

    為了避免這樣的情況,我建議使用Array.find。它僅僅返回第一個滿足過濾條件的元素。而且,Array.find會在查找到第一個滿足條件的元素后就結束執行,而不會查找整個數組。

    'use strict';
    const characters = [
     { id: 1, name: 'ironman' },
     { id: 2, name: 'black_widow' },
     { id: 3, name: 'captain_america' },
     { id: 4, name: 'captain_america' },
    ];
    function getCharacter(name) {
     return character => character.name === name;
    }
    console.log(characters.filter(getCharacter('captain_america')));
    // [
    // { id: 3, name: 'captain_america' },
    // { id: 4, name: 'captain_america' },
    // ]
    console.log(characters.find(getCharacter('captain_america')));
    // { id: 3, name: 'captain_america' }

    3. 不要使用Array.find,使用Array.some

    我承認我犯過很多次錯誤。后來,一個很要好的朋友讓我去看看MDN的文檔,說有更好的解決方案。這個情況和剛剛提到的Array.indexOf/Array.includes很像。

    在前面的例子中,我們看到Array.find接受一個過濾函數,返回滿足的元素。那么,如果我們要查找一個數組是否包含某個元素的時候,Array.find是否是最佳的方案呢?可能不是,因為它返回的是元素具體的值,而不是布爾值。

    我推薦大家使用Array.some,它會返回布爾值。

    'use strict';
    const characters = [
     { id: 1, name: 'ironman', env: 'marvel' },
     { id: 2, name: 'black_widow', env: 'marvel' },
     { id: 3, name: 'wonder_woman', env: 'dc_comics' },
    ];
    function hasCharacterFrom(env) {
     return character => character.env === env;
    }
    console.log(characters.find(hasCharacterFrom('marvel')));
    // { id: 1, name: 'ironman', env: 'marvel' }
    console.log(characters.some(hasCharacterFrom('marvel')));
    // true

    4. 不要使用Array.map和Array.filter組合,使用Array.reduce

    Array.reduce有點難以理解!但是,如果我們每次在同時使用Array.filter和Array.map的時候,你是否覺察到需要點東西,對不?

    我的意思是:我們對整個數組循環了2遍。第一次是過濾返回一個新的數組,第二次通過map又構造一個新的數組。我們使用了兩個數組方法,每一個方法都有各自的回調函數,而且Array.filter返回的數組以后再也不會用到。

    為了避免低效率,我建議使用Array.reduce。同樣的結果,更優雅的代碼!請看下面的例子:‘'

    'use strict';
    const characters = [
     { name: 'ironman', env: 'marvel' },
     { name: 'black_widow', env: 'marvel' },
     { name: 'wonder_woman', env: 'dc_comics' },
    ];
    console.log(
     characters
     .filter(character => character.env === 'marvel')
     .map(character => Object.assign({}, character, { alsoSeenIn: ['Avengers'] }))
    );
    // [
    // { name: 'ironman', env: 'marvel', alsoSeenIn: ['Avengers'] },
    // { name: 'black_widow', env: 'marvel', alsoSeenIn: ['Avengers'] }
    // ]
    console.log(
     characters
     .reduce((acc, character) => {
     return character.env === 'marvel'
     ? acc.concat(Object.assign({}, character, { alsoSeenIn: ['Avengers'] }))
     : acc;
     }, [])
    )
    // [
    // { name: 'ironman', env: 'marvel', alsoSeenIn: ['Avengers'] },
    // { name: 'black_widow', env: 'marvel', alsoSeenIn: ['Avengers'] }
    // ]

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    JavaScript數組方法的錯誤使用例子

    JavaScript數組方法的錯誤使用例子:1. 不要使用Array.indexOf,使用Array.includes 如果你要在數組中查找元素,使用Array.indexOf。記得在我學習JavaScript課程時候,有這樣一句話。這句話沒錯,確實可以這么使用! 根據MDN文檔:Array.indexOf會返回被查找元素第一個匹配
    推薦度:
    標簽: 方法 使用 js
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 99re66在线观看精品免费| 久久精品国产亚洲Aⅴ蜜臀色欲| 国产精品igao视频| 久久精品国产第一区二区三区| 日韩精品久久久久久久电影蜜臀| 亚洲精品高清视频| heyzo高无码国产精品| 午夜不卡久久精品无码免费| 女人高潮内射99精品| 2021国产成人精品久久| 91原创国产精品| 精品无码AV一区二区三区不卡 | 国产精品久久久久久搜索| 国产成人精品天堂| 永久免费精品影视网站| 久久精品这里只有精99品| 92国产精品午夜福利免费| 国产精品久久久久久影院| 99国产精品无码| 国产探花在线精品一区二区| 青草国产精品久久久久久| 亚洲精品国产精品乱码不99 | 久久久精品一区二区三区| 国产精品9999久久久久| 精品无码AV无码免费专区| 欧洲成人午夜精品无码区久久| 无码精品视频一区二区三区| 亚洲国产精品成人精品无码区在线| 亚洲精品国产精品国自产观看| 亚洲国产精品自产在线播放| 欧美精品整片300页| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 99久久综合国产精品二区| 精品一区二区在线观看| 久久精品九九亚洲精品天堂| 色综合久久综精品| 国产成人无码精品久久久免费 | 精品人妻中文字幕有码在线| 国产精品人人爽人人做我的可爱| 国产精品网站在线观看免费传媒| 国产l精品国产亚洲区在线观看|