精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何在JavaScript中更好地使用數組

開發 前端
本文短小精悍,我保證。在過去的數個月里,我注意到在我審閱的 pull request 中有四個(關于數組使用的)錯誤經常出現。同時,我自己也會犯這些錯誤,因此有了這篇文章。讓我們一起學習,以確保以后能正確地使用數組方法!

[[245752]]

本文短小精悍,我保證。在過去的數個月里,我注意到在我審閱的 pull request 中有四個(關于數組使用的)錯誤經常出現。同時,我自己也會犯這些錯誤,因此有了這篇文章。讓我們一起學習,以確保以后能正確地使用數組方法!

使用 Array.includes 替代 Array.indexOf

 "如果需要在數組中查找某個元素,請使用 Array.indexOf。"

我記得在我學習 JavaScript 的課程中有類似的這么一句話。毫無疑問,這完全正確!

在 MDN 文檔中,對 Array.indexOf 的描述是:返回在數組中可以找到一個給定元素的***個索引,如果不存在,則返回-1。因此,如果在之后的代碼中需要用到(給給定元素的)索引,那么 Array.indexOf 是不二之選。

然而,如果我們僅需要知道數組中是否包含給定元素呢?這意味著只是是與否的區別,這是一個布爾問題(boolean question)。針對這種情況,我建議使用直接返回布爾值的 Array.includes。 

  1. 'use strict';  
  2. const characters = [  
  3.   'ironman',  
  4.   'black_widow',  
  5.   'hulk',  
  6.   'captain_america',  
  7.   'hulk',  
  8.   'thor',  
  9. ];  
  10. console.log(characters.indexOf('hulk'));  
  11. // 2  
  12. console.log(characters.indexOf('batman'));  
  13. // -1  
  14. console.log(characters.includes('hulk'));  
  15. // true  
  16. console.log(characters.includes('batman'));  
  17. // false 

使用 Array.find 替代 Array.filter

Array.filter 是一個十分有用的方法。它通過回調函數過濾原數組,并將過濾后的項作為新數組返回。正如它的名字所示,我們將這個方法用于過濾,(一般而言)會獲得一個長度更短的新數組。

然而,如果知道經回調函數過濾后,只會剩余唯一的一項,那么我不建議使用 Array.filter。比如:使用等于某個唯一 ID 為過濾條件去過濾一個數組。在這個例子中,Array.filter 返回一個僅有一項的新數組。然而,我們僅僅是為了獲取 ID 為特定 ID 的那一項,這個新數組顯得毫無用處。

讓我們討論一下性能。為了獲取所有符合回調函數過濾條件的項,Array.filter 必須遍歷整個數組。如果原數組中有成千上萬項,回調函數需要執行的次數是相當多的。

為避免這些情況,我建議使用 Array.find。它與 Array.filter 一樣需要一個回調函數,(但只是返回)符合條件的***項。當找到符合回調函數過濾條件的***個元素時,它會立即停止往下的搜尋。不再遍歷整個數組。 

  1. 'use strict';  
  2. const characters = [  
  3.   { id: 1, name: 'ironman' },  
  4.   { id: 2, name: 'black_widow' },  
  5.   { id: 3, name: 'captain_america' },  
  6.   { id: 4, name: 'captain_america' },  
  7. ];  
  8. function getCharacter(name) {  
  9.   return character => character.name === name;  
  10.  
  11. console.log(characters.filter(getCharacter('captain_america')));  
  12. // [  
  13. //   { id: 3, name: 'captain_america' },  
  14. //   { id: 4, name: 'captain_america' },  
  15. // ]  
  16. console.log(characters.find(getCharacter('captain_america')));  
  17. // { id: 3, name: 'captain_america' } 

使用 Array.some 替代 Array.find

我承認我經常犯這個錯誤。之后,一位朋友建議我去查看 MDN 文檔 以尋找更好的方法。事實上(這錯誤)與上面 Array.indexOf/Array.includes 的例子十分相像。

在上面的例子中,我們知道 Array.find 需要一個回調函數作為參數,并返回(符合條件的)***個元素。然而,當我們需要知道數組中是否存在一個元素時,Array.find 是***的選擇嗎?不一定是,因為它返回一個元素,而不是一個布爾值。

在下面的例子中,我建議使用 Array.some,它返回你需要的布爾值。 

  1. 'use strict';  
  2. const characters = [  
  3.   { id: 1, name: 'ironman', env: 'marvel' },  
  4.   { id: 2, name: 'black_widow', env: 'marvel' },  
  5.   { id: 3, name: 'wonder_woman', env: 'dc_comics' },  
  6. ];  
  7. function hasCharacterFrom(env) {  
  8.   return character => character.env === env;  
  9.  
  10. console.log(characters.find(hasCharacterFrom('marvel')));  
  11. // { id: 1, name: 'ironman', env: 'marvel' }  
  12. console.log(characters.some(hasCharacterFrom('marvel')));  
  13. // true 

譯者注:補充一下 Array.some 與 Array.includes 使用上的區別。兩者都返回一個布爾值,表示某項是否存在于數組之中,一旦找到對應的項,立即停止遍歷數組。不同的是 Array.some 的參數是回調函數,而 Array.includes 的參數是一個值(均不考慮第二個可選參數)。

假設希望知道值為 value 的項是否存在于數組中,既可以編寫代碼:[].includes(value), 也可以給 Array.some 傳入 item => item === value 作為回調函數。Array.includes  使用更簡單,Array.some 可操控性更強。

使用 Array.reduce 替代 Array.filter 與 Array.map 的組合

事實上說,Array.reduce 不太容易理解。然而,如果我們先使用 Array.filter 過濾原數組,之后(對結果)再調用 Array.map (以獲取一個新數組)。這看起似乎有點問題,是我們忽略了什么嗎?

這樣做的問題是:我們遍歷了兩次數組。***次是過濾原數組以獲取一個長度稍短的新數組,第二次遍歷(譯者注:指 Array.map)是對 Array.filter 的返回的新數組進行加工,再次創造了一個新數組!為得到最終的結果,我們結合使用了兩個數組方法。每個方法都有它自己的回調函數,而且供 Array.map 使用的臨時數組是由 Array.filter 提供的,(一般而言)該數組無法復用。

為避免如此低效場景的出現,我的建議是使用 Array.reduce 。一樣的結果,更好的代碼!Array.reduce 允許你將過濾后切加工過的項放進累加器中。累加器可以是需要待遞增的數字、待填充的對象、 待拼接的字符串或數組等。

在上面的例子中,我們使用了 Array.map,(但更)建議使用累加器為待拼接數組的 Array.reduce 。在下面的例子中,根據變量 env 的值,我們會將它加進累加器中或保持累加器不變(即不作任何處理)。 

  1. 'use strict';  
  2. const characters = [  
  3.   { name: 'ironman', env: 'marvel' },  
  4.   { name: 'black_widow', env: 'marvel' },  
  5.   { name: 'wonder_woman', env: 'dc_comics' },  
  6. ];  
  7. console.log(  
  8.   characters  
  9.     .filter(character => character.env === 'marvel')  
  10.     .map(character => Object.assign({}, character, { alsoSeenIn: ['Avengers'] }))  
  11. );  
  12. // [  
  13. //   { name: 'ironman', env: 'marvel', alsoSeenIn: ['Avengers'] },  
  14. //   { name: 'black_widow', env: 'marvel', alsoSeenIn: ['Avengers'] }  
  15. // ]  
  16. console.log(  
  17.   characters  
  18.     .reduce((acc, character) => {  
  19.       return character.env === 'marvel'  
  20.         ? acc.concat(Object.assign({}, character, { alsoSeenIn: ['Avengers'] }))  
  21.         : acc;  
  22.     }, [])  
  23.  
  24. // [  
  25. //   { name: 'ironman', env: 'marvel', alsoSeenIn: ['Avengers'] },  
  26. //   { name: 'black_widow', env: 'marvel', alsoSeenIn: ['Avengers'] }  
  27. // ] 

這就是本文的全部內容!

希望這對你有幫助。如果你對本文有任何意見或(關于數組方法使用的)例子需要討論,請在評論中告訴我。如果你覺得本文不錯,請給我點贊 👏 (譯者注:對燈發誓,這是原文,不是譯者騙贊!)并分享給更多的小伙伴。感謝你的閱讀!

PS: 你可以在 Twitter 上關注我 。 

責任編輯:龐桂玉 來源: 前端大全
相關推薦

2022-09-12 23:53:53

JavaScript條件判斷開發

2020-10-04 11:25:18

安全技術工具

2021-03-18 10:45:02

JavaScript數組運算符

2021-03-11 23:43:20

JavaScript數組開發

2021-02-25 22:17:19

開發技術編程

2020-07-08 08:22:08

FlutterSVGPNG

2019-03-22 14:20:26

管理多云云計算

2020-11-26 08:12:24

JavaScript對象數組

2021-05-23 15:46:23

React代碼前端

2020-12-08 08:07:41

JavaScript中等分數組

2020-05-15 10:46:11

云成本私有云混合云

2012-02-08 16:19:09

ibmdw

2012-02-14 12:50:13

ibmdw

2023-10-08 15:41:35

2015-11-18 09:56:24

數據中心監控

2023-01-09 08:39:38

因果推斷機器學習

2024-10-22 15:10:49

2022-01-21 10:58:39

JavaScriptGolangPython

2019-01-23 13:39:00

產品開發AR

2022-10-13 00:03:00

JavaScripSQL函數
點贊
收藏

51CTO技術棧公眾號

国产伦精品一区二区三区视频黑人| 精品视频偷偷看在线观看| 在线亚洲美日韩| 国产精品视频久久久久久| 欧美三级特黄| 日韩精品高清在线观看| 手机看片一级片| 牛牛在线精品视频| 久久伊人中文字幕| 国产欧美日韩专区发布| 四虎永久在线精品| 日韩理论在线| 亚洲精品www久久久| 成人性生交免费看| 国产高潮在线| 亚洲色大成网站www久久九九| 精品国产乱码一区二区三区四区 | 色综合久久中文字幕| 久久精品国产精品亚洲精品色 | 92精品国产成人观看免费| 国产精品福利网站| 国产真实乱偷精品视频| 99精品视频在线| 亚洲欧美另类国产| 蜜臀视频在线观看| 四虎精品在线观看| 91久久人澡人人添人人爽欧美| 青青草综合视频| 日本在线天堂| 久久欧美中文字幕| 国产精品一区二区三区精品| 97国产精品久久久| aa亚洲婷婷| 欧美人成在线视频| 亚洲一区电影在线观看| 精品精品99| 日韩精品视频免费在线观看| 中国特级黄色片| 视频在线一区| 日韩欧美的一区| 两性午夜免费视频| 粉嫩av一区二区三区四区五区| 日韩欧美999| 精品人妻人人做人人爽| 3d玉蒲团在线观看| 亚洲日本丝袜连裤袜办公室| 亚洲日本理论电影| a视频网址在线观看| 91婷婷韩国欧美一区二区| 成人h视频在线观看| av免费观看网址| 国产一区二区三区免费在线观看| 国产精品永久免费观看| 在线视频播放大全| 精品亚洲porn| 亚洲a在线观看| 国产伦子伦对白视频| 精品中文字幕一区二区| 亚洲一区二区三区成人在线视频精品 | 欧美午夜在线视频| 欧美大片欧美激情性色a∨久久| 久久嫩草捆绑紧缚| 中文一区一区三区免费在线观看| 久久亚洲精品一区| 久久久久成人网站| 在线欧美三区| 1769国产精品| 欧美亚洲另类小说| 蜜桃精品在线观看| 成人伊人精品色xxxx视频| 国产精品久久无码一三区| 国产在线播放一区二区三区 | 哺乳挤奶一区二区三区免费看| 欧美videofree性高清杂交| 亚洲图片欧美另类| 亚洲精品亚洲人成在线| 尤物九九久久国产精品的分类| 免费黄色国产视频| 欧美日韩国产综合网| 国内精品400部情侣激情| 亚洲AV无码成人精品区东京热| 视频一区二区不卡| 91人人爽人人爽人人精88v| 亚洲AV无码国产精品午夜字幕| 99热这里都是精品| 视频一区视频二区视频| dj大片免费在线观看| 精品久久久精品| 日韩精品视频一二三| 草莓视频一区二区三区| 一本色道久久综合亚洲精品小说 | 日韩黄色免费电影| 91色在线视频| 日韩国产福利| 亚洲日本va在线观看| 黄色一级片在线看| 免费成人高清在线视频| 精品国产三级电影在线观看| 人人人妻人人澡人人爽欧美一区| 综合久久亚洲| 国产精品极品尤物在线观看| 国产夫绿帽单男3p精品视频| 久久综合九色综合久久久精品综合| 亚洲国产一区在线| 阿v视频在线观看| 欧美精品久久99久久在免费线| 日本少妇xxxx| 婷婷六月综合| 日韩免费av一区二区| 不卡的日韩av| 国产精品理论片| 黄www在线观看| 精品视频在线播放一区二区三区 | 2021中文字幕在线| 欧美午夜不卡视频| 无码人妻精品一区二区三区温州| 亚洲情侣在线| 国产精品午夜视频| av女名字大全列表| 一区二区免费视频| 涩涩网站在线看| 少妇精品久久久| 韩国福利视频一区| 成人福利小视频| 亚洲欧美另类久久久精品| 无需播放器的av| 日本午夜精品| 久久久最新网址| 精品人妻一区二区三区三区四区 | 色av性av丰满av| 波多野结衣在线aⅴ中文字幕不卡| 亚洲欧美日韩国产成人综合一二三区 | 最新日韩在线视频| 欧美精品aaaa| 欧美激情在线免费| 欧美性做爰毛片| 熟妇人妻中文av无码| 亚洲一区在线看| 国产精品久久久久久久99| 欧美激情理论| 91精品免费看| 久操视频在线| 欧美男男青年gay1069videost| 中文字幕 自拍| 久久精品女人天堂| 欧美在线3区| 黄瓜视频成人app免费| 亚洲人成在线一二| 97人妻一区二区精品视频| 久久久亚洲欧洲日产国码αv| 日韩av片在线看| 亚洲三级网址| 国产激情999| 9色在线观看| 777色狠狠一区二区三区| 成年人午夜剧场| 国产成人精品在线看| 日本久久久网站| 精品午夜电影| 日本一区二区三区四区视频| 国产在线视频网站| 欧美视频一区二区三区四区 | 国产麻豆剧传媒精品国产av| 国产综合欧美| 久久精品国产精品国产精品污| 人人草在线视频| 亚洲天堂第二页| 亚洲自拍偷拍另类| 亚洲精品成人少妇| 亚洲中文字幕一区| 日韩vs国产vs欧美| a级网站在线观看| 欧美日日夜夜| 国产精品video| 国产一二区在线| 亚洲国产精品成人av| 日日夜夜狠狠操| 最新不卡av在线| 超碰caoprom| 免费在线看成人av| 亚洲精品天堂成人片av在线播放| 国产厕拍一区| 国产精品福利在线| 中文在线观看免费| 国产手机视频精品| 一本色道久久综合熟妇| 亚洲午夜精品久久久久久久久| 丝袜美腿中文字幕| 国产在线视视频有精品| 欧美 日韩 亚洲 一区| 国产一区二区三区四区五区| 亚洲最大的av网站| 韩国主播福利视频一区二区三区| xx视频.9999.com| 婷婷五月综合久久中文字幕| 欧美三级中文字| 日本污视频在线观看| 中文字幕不卡的av| 99精品一区二区三区无码吞精 | 国产精品一区二区三区久久久| 曰本三级在线| 中文综合在线观看| 亚洲三区在线播放| 日韩欧美在线观看一区二区三区| av黄色在线播放| 一区二区三区日韩精品| 熟女少妇内射日韩亚洲| 成人少妇影院yyyy| 国产欧美一区二| 日韩综合小视频| 亚洲国产成人精品无码区99| 日韩中字在线| 欧美精品七区| 国产精品主播在线观看| 亚洲影视中文字幕| 成人在线观看免费视频| 青青草一区二区| 丁香花在线高清完整版视频| 日韩在线免费高清视频| 精华区一区二区三区| 亚洲成人久久久| 国产www视频| 欧美久久久久久久久| 波多野结衣理论片| 欧美视频在线免费看| 国产精品theporn动漫| 亚洲免费观看视频| 亚洲熟女毛茸茸| 国产肥老妇视频| 亚洲精品成人少妇| 国产精品嫩草影院俄罗斯| 婷婷精品在线观看| 成人免费淫片aa视频免费| 全亚洲第一av番号网站| 69国产精品成人在线播放| 影音先锋在线视频| 免费99精品国产自在在线| jizz在线观看视频| 国产亚洲综合久久| 国产视频精品久久| 亚洲色图17p| 日韩一二三四| 亚洲精品久久久久久久久| 亚洲男女视频在线观看| 日韩午夜激情视频| va视频在线观看| 日韩一区二区三区在线观看| av一级黄色片| 精品少妇一区二区三区日产乱码 | 麻豆精品传媒视频| 农村少妇一区二区三区四区五区| 国产精品 日韩| 久久香蕉精品香蕉| 免费精品视频一区二区三区| 最新国产一区| 日本一区二区三区视频免费看 | 丁香色欲久久久久久综合网| 欧美日本精品| 国产欧美日韩小视频| 亚洲成色精品| 成年人观看网站| 免费看欧美女人艹b| 亚洲精品mv在线观看| 国产乱码精品一区二区三区忘忧草 | 最新精品视频| 国内久久视频| www.com毛片| 免费成人在线影院| 中文字幕第10页| 成人一道本在线| 中文字幕免费看| 亚洲日本一区二区三区| 国产精品第二十页| 日韩欧美国产免费播放| 中文字幕在线网站| 日韩欧美一二三区| 欧洲亚洲精品视频| 日韩最新在线视频| 丁香花在线高清完整版视频| 国产成人精品视频| 精品一区二区三区中文字幕视频| 国产日韩欧美亚洲一区| 欧美日韩国产在线观看网站 | 国产一区二区三区久久| 午夜欧美福利视频| 国产成人精品免费一区二区| 欧美无人区码suv| 中文字幕五月欧美| 日韩免费在线视频观看| 欧美午夜精品电影| 四虎永久在线观看| 日韩在线观看精品| 日韩伦理在线一区| 成人免费午夜电影| 亚洲精品无吗| 激情成人开心网| 免费在线观看日韩欧美| 四虎精品一区二区| 国产精品久久久久久久久免费丝袜| 玖玖爱免费视频| 在线观看www91| 亚洲大尺度网站| 最新国产精品亚洲| 在线观看网站免费入口在线观看国内| 国产日韩视频在线观看| 亚洲桃色综合影院| 人人妻人人澡人人爽欧美一区| 日韩福利视频导航| 污片免费在线观看| 亚洲激情网站免费观看| 中文字幕在线观看视频一区| 亚洲开心激情网| 俄罗斯一级**毛片在线播放| 91精品国产综合久久香蕉最新版 | 国产又黄又大又粗视频| 国产激情视频一区二区三区欧美 | 亚洲午夜激情av| 国产精品久久无码一三区| 亚洲午夜av久久乱码| 毛片大全在线观看| 91欧美日韩一区| 久久人人99| 91视频免费版污| 久久色中文字幕| 国产女同在线观看| 日韩你懂的电影在线观看| 日本在线观看www| 国产精品对白刺激| 欧美日韩爱爱| 日韩欧美在线免费观看视频| 91视频免费看| 久久久久久久久影院| 亚洲成人精品在线| av成人福利| 好吊色欧美一区二区三区四区| 韩国av一区| 国产老头和老头xxxx×| 亚洲乱码国产乱码精品精可以看| 亚洲无码精品在线观看| 自拍偷拍亚洲区| 欧美日韩卡一| 在线免费观看一区二区三区| 久久精品国产77777蜜臀| 99久久99久久精品免费看小说.| 在线观看欧美黄色| av电影在线观看网址| 国产精品视频中文字幕91| 91日韩欧美| 国内精品国产三级国产aⅴ久| 亚洲女人的天堂| xxxx国产精品| 久久久日本电影| 欧洲精品一区| av免费中文字幕| 日本一区二区成人在线| 亚洲视频一区在线播放| 按摩亚洲人久久| 一区二区亚洲视频| 国产精品裸体瑜伽视频| 久久男人中文字幕资源站| 波多野结衣电影在线播放| 中文字幕国内精品| 成人在线视频区| avav在线播放| 久久综合久久综合久久综合| 午夜一区二区三区四区| 俺去了亚洲欧美日韩| 91精品入口| 精品中文字幕av| 中文字幕的久久| 99国产精品久久久久久久成人| 欧美极品少妇xxxxⅹ喷水| 精品久久97| 激情婷婷综合网| 成人免费一区二区三区视频| 成人午夜精品福利免费| 欧美专区福利在线| 久久视频精品| 亚洲美女在线播放| 在线一区二区三区四区五区| 国产丝袜在线| 久久精品国产一区二区三区日韩| 日本中文字幕一区二区视频 | 一区二区三区导航| 337人体粉嫩噜噜噜| 日韩午夜在线播放| 台湾佬成人网| 日本黄xxxxxxxxx100| 26uuu国产在线精品一区二区| 一本色道久久综合精品婷婷| 91国产视频在线播放| 天天影视欧美综合在线观看| 日本黄色录像片| 欧美日韩高清在线播放| 国产调教在线| 中文字幕第一页亚洲| 久久综合狠狠综合| 精品国产va久久久久久久| 国产精品高潮呻吟久久av野狼| 欧美jjzz|