成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

JavaScript中Array方法的正確打開方式

瀏覽:150日期:2023-11-10 13:31:02

JavaScript中Array方法的正確打開方式

在過去的幾個月,我發現我的拉取請求中存在四個完全相同的 JavaScript 錯誤。于是我寫了這篇文章,總結了如何在 JavaScript 中正確使用地使用 Array 的方法!

用 Array.includes 代替 Array.indexOf

“如果你要在數組中查找元素,請使用 Array.indexOf”。我記得在學習 JavaScript 的時候,在教材中讀到這樣的一句話。毫無疑問,這句話是真的!

MDN 文檔寫道,Array.indexOf 將“返回第一次出現給定元素的索引”。因此,如果我們稍后要在代碼中使用這個返回的索引,那么使用 Array.indexOf 找到索引就對了。

但是,如果我們只想知道數組是否包含某個值,該怎么辦?這似乎是一個是與否的問題,或者說是一個布爾值問題。對于這種情況,我建議使用返回布爾值的 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 使用 Array.find 而不是 Array.filter

Array.filter 是一個非常有用的方法。它接受一個回調函數作為參數,基于一個包含所有元素的數組創建出一個新的數組。正如它的名字一樣,我們使用這個方法來過濾元素,獲得更短的數組。

但是,如果回調函數只能返回一個元素,那么我就不推薦使用這個方法,例如使用回調函數來過濾唯一 ID。在這種情況下,Array.filter 將返回一個只包含一個元素的新數組。我們的意圖可能是通過查找特定的 ID 找到數組中包含的唯一值。

我們來看看這個方法的性能。要返回與回調函數匹配的所有元素,Array.filter 必須遍歷整個數組。此外,我們假設有數百個元素可以滿足回調參數,那么過濾后的數組會非常大。

為了避免這種情況,我建議使用 Array.find。它需要一個像 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’ }

用 Array.some 代替 Array.find

我承認這個錯誤我犯了很多次。然后,一位善良的朋友告訴我,最好可以先參考 MDN 文檔。這與上面的 Array.indexOf/Array.includes 非常相似。

在前面的例子中,我們看到 Array.find 需要一個回調函數作為參數,并返回一個元素。如果我們想要知道數組是否包含某個值,Array.find 是最好的解決方案嗎?可能不是,因為它返回的是一個元素值,而不是一個布爾值。

對于這種情況,我建議使用 Array.some,它返回所需的布爾值。另外,從語義上看,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

使用 Array.reduce 而不是鏈接 Array.filter 和 Array.map

讓我們面對現實吧,Array.reduce 不容易理解。事實確實如此!但是,如果我們使用 Array.filter 和 Array.map 的組合,感覺缺少了什么,對吧?

我的意思是,我們遍歷了兩次數組。第一次過濾數組并創建一個較短的數組,第二次又基于 Array.filter 獲得數組創建一個包含新值的數組。為了獲得我們想要的新數組,我們使用了兩個 Array 方法。每個方法都有自己的回調函數和一個用不到的數組——由 Array.filter 創建的那個數組。

為了避免這種性能損耗,我的建議是使用 Array.reduce。結果是一樣的,代碼卻更簡單! 我們可以使用 Array.reduce 進行過濾,并將目標元素添加到累加器中。累加器可以是遞增的數字、要填充的對象、要連接的字符串或數組。

在我們的例子中,因為之前使用了 Array.map,所以我建議使用 Array.reduce 將滿足條件的數組元素加入到累加器中。在下面的示例中,根據 env 值的具體情況,我們將它添加到累加器中或保持累加器不變。

’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:(010)68476606】

來自:http://developer.51cto.com/art/201809/583079.htm

標簽: JavaScript
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
国产精品久久久久天堂| 成人性视频网站| 成人丝袜高跟foot| 欧美精品一级二级三级| 免费成人性网站| 久久香蕉精品| 天天免费综合色| 亚洲综合丁香| 亚洲国产一区在线观看| 亚洲成人自拍视频| 亚洲欧美日韩国产综合| 久久青草久久| 日韩黄色小视频| 91九色最新地址| 久久福利资源站| 91精品国产手机| 成人中文字幕电影| 久久午夜色播影院免费高清| 亚洲国产成人av| 榴莲视频成人在线观看| 偷窥少妇高潮呻吟av久久免费| 久久久久91| 久久电影国产免费久久电影| 欧美福利一区二区| 国产在线精品免费| 日韩欧美亚洲另类制服综合在线| 国产91丝袜在线18| 久久久一区二区三区| 欧美私人啪啪vps| 亚洲免费看黄网站| 国产精品毛片va一区二区三区| 亚洲高清视频在线| 色噜噜久久综合| 极品瑜伽女神91| 日韩免费观看2025年上映的电影| 91原创在线视频| 1000部国产精品成人观看| 国产视频欧美| 青青草97国产精品免费观看 | 欧美蜜桃一区二区三区| 国产suv精品一区二区883| 久久新电视剧免费观看| 狠狠色丁香久久综合频道| 亚洲一区国产视频| 欧美三级韩国三级日本一级| 国产宾馆实践打屁股91| 中文字幕精品—区二区四季| av一区二区三区在线| 欧美国产日韩亚洲一区| 免费在线成人av| 国产一区二区三区黄视频| 久久久久九九视频| 国产精品乱码一区二区三区| 久久国产成人午夜av影院| 精品精品国产高清a毛片牛牛| 亚洲香蕉视频| 日韩高清欧美激情| 日韩免费一区二区| 亚洲青涩在线| 免费成人在线视频观看| 久久综合久久99| 国产精品一区二区三区四区五区| 久久99在线观看| 2019国产精品| 久久国产精品免费| 91精品国产综合久久久久久久| 亚洲理论在线| 欧美激情91| 亚洲欧美日韩精品久久久| 欧美精品成人一区二区三区四区| 久久精品一区蜜桃臀影院| 一区二区激情小说| 国产成人日日夜夜| 久久精品国产77777蜜臀| 中文一区二区完整视频在线观看| 国产精品久久7| 色综合天天狠狠| 亚洲摸摸操操av| av电影在线观看完整版一区二区| 亚洲国产一区视频| 欧美精品aⅴ在线视频| 欧美成人在线免费观看| 欧美大白屁股肥臀xxxxxx| 蜜臀99久久精品久久久久久软件| 国产一级精品在线| 中文字幕免费不卡在线| 在线视频综合导航| 欧美成人午夜| 奇米色777欧美一区二区| 欧美人体做爰大胆视频| 最新日韩欧美| 国产成人av影院| 亚洲国产日日夜夜| 日韩欧美不卡一区| 亚洲一区二区精品在线观看| 成人免费视频一区| 亚洲妇女屁股眼交7| 精品sm在线观看| 免费亚洲婷婷| 欧美一站二站| 黄网站免费久久| 亚洲人妖av一区二区| 欧美一卡2卡3卡4卡| 国产精品有限公司| 色综合婷婷久久| 久久国产麻豆精品| 亚洲精品中文字幕乱码三区| 日韩欧美国产一区二区在线播放| 一区二区三区av| 91在线观看视频| 精品系列免费在线观看| 亚洲欧美日本韩国| 欧美精品一区二区三区久久久| 91福利区一区二区三区| 亚洲国产日韩欧美| 99久久免费精品高清特色大片| 美女免费视频一区二区| 亚洲精品视频观看| www国产成人| 欧美日韩一区二区不卡| 99热免费精品| 亚洲欧美一级二级三级| 国产一区二区精品在线观看| 亚洲午夜日本在线观看| 中文字幕制服丝袜成人av | 色综合色狠狠天天综合色| 精品一区免费av| 性做久久久久久免费观看欧美| 国产精品视频你懂的| 欧美v亚洲v综合ⅴ国产v| 欧美日韩视频在线第一区 | 国产一区激情在线| 亚洲成av人片一区二区三区| 中文字幕av免费专区久久| 日韩欧美国产综合在线一区二区三区| 色综合久久天天| 国产精品一卡| 99精品视频网| 亚洲精品乱码视频| 黄色av成人| 欧美精选一区| 97精品电影院| 东方欧美亚洲色图在线| 国产在线视频一区二区三区| 日韩精品亚洲一区二区三区免费| 亚洲免费色视频| 亚洲欧美中日韩| 国产日产欧美一区| 精品国产乱码久久| 日韩欧美一区二区免费| 欧美精品久久99久久在免费线 | 国产精品麻豆欧美日韩ww| 久久新电视剧免费观看| 日韩三级在线观看| 宅男噜噜噜66一区二区66| 欧美色中文字幕| 色婷婷一区二区| 免费国产一区二区| 亚洲欧美电影在线观看| 亚洲视频www| 国产视频一区免费看| 一本色道久久综合一区| 99re66热这里只有精品4| 在线观看一区视频| 亚洲国产精品www| 亚洲欧洲日本国产| 一区二区三区你懂的| 国产视频精品网| 性欧美精品高清| 玖玖精品视频| 国产精品毛片va一区二区三区| aa级大片欧美三级| 亚洲日本欧美| 国产午夜精品在线| 性欧美xxxx大乳国产app| 久久aⅴ国产紧身牛仔裤| 性伦欧美刺激片在线观看| 一本大道综合伊人精品热热| 欧美图区在线视频| 3d成人h动漫网站入口| 欧美一区二区福利在线| 久久品道一品道久久精品| 国产欧美日韩另类视频免费观看| 久久精品男人天堂av| 亚洲国产精品黑人久久久| 综合亚洲深深色噜噜狠狠网站| 亚洲男人的天堂一区二区| 亚洲一区二区美女| 日韩精品电影一区亚洲| 激情伊人五月天久久综合| 国产成人精品aa毛片| 99精品久久只有精品| 红桃视频亚洲| 亚洲一区二区三区精品视频| 色婷婷综合久色| 7777精品伊人久久久大香线蕉的| 欧美r级电影在线观看| 国产精品沙发午睡系列990531| 亚洲精品中文字幕在线观看| 轻轻草成人在线|