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

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

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

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

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

在過去的幾個(gè)月,我發(fā)現(xiàn)我的拉取請求中存在四個(gè)完全相同的 JavaScript 錯(cuò)誤。于是我寫了這篇文章,總結(jié)了如何在 JavaScript 中正確使用地使用 Array 的方法!

用 Array.includes 代替 Array.indexOf

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

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

但是,如果我們只想知道數(shù)組是否包含某個(gè)值,該怎么辦?這似乎是一個(gè)是與否的問題,或者說是一個(gè)布爾值問題。對于這種情況,我建議使用返回布爾值的 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 是一個(gè)非常有用的方法。它接受一個(gè)回調(diào)函數(shù)作為參數(shù),基于一個(gè)包含所有元素的數(shù)組創(chuàng)建出一個(gè)新的數(shù)組。正如它的名字一樣,我們使用這個(gè)方法來過濾元素,獲得更短的數(shù)組。

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

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

為了避免這種情況,我建議使用 Array.find。它需要一個(gè)像 Array.filter 一樣的回調(diào)函數(shù)作為參數(shù),并返回滿足回調(diào)函數(shù)的第一個(gè)元素的值。此外,只要找到第一個(gè)滿足回調(diào)函數(shù)的元素,Array.find 就會停止,無需遍歷整個(gè)數(shù)組。通過 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

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

在前面的例子中,我們看到 Array.find 需要一個(gè)回調(diào)函數(shù)作為參數(shù),并返回一個(gè)元素。如果我們想要知道數(shù)組是否包含某個(gè)值,Array.find 是最好的解決方案嗎?可能不是,因?yàn)樗祷氐氖且粋€(gè)元素值,而不是一個(gè)布爾值。

對于這種情況,我建議使用 Array.some,它返回所需的布爾值。另外,從語義上看,Array.some 表示我們只想知道某個(gè)元素是否存在,而不需要得到這個(gè)元素。

’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

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

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

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

在我們的例子中,因?yàn)橹笆褂昧?Array.map,所以我建議使用 Array.reduce 將滿足條件的數(shù)組元素加入到累加器中。在下面的示例中,根據(jù) 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’] } // ]

【責(zé)任編輯:龐桂玉 TEL:(010)68476606】

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

標(biāo)簽: JavaScript
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
老牛国内精品亚洲成av人片| 亚洲精品国产嫩草在线观看 | 在线精品视频一区| 精品一区在线| re久久精品视频| 欧美在线观看视频一区| 亚洲天堂成人| 久久精品免费一区二区三区| 成人免费电影网址| 欧美丰满日韩| 天堂中文av在线资源库| 日韩在线免费| 亚洲国产日韩欧美在线| 成人av二区| 在线视频亚洲| 日韩专区在线视频| 日韩一区二区三区在线看| 青青草国产精品亚洲专区无| 国产麻豆精品| 麻豆精品视频在线观看免费| 精品99在线| 日韩欧美精品一区| 亚洲91久久| 99视频精品| 99国产精品99久久久久久粉嫩| 亚洲主播在线| 亚洲精品乱码日韩| 欧美日本不卡高清| 久久精品国产99| 日韩精品首页| 亚洲免费影院| 日韩国产精品久久久久久亚洲| 91麻豆精品| 久久精品国产亚洲一区二区三区| 福利一区在线| 欧美精选一区二区三区| 中文字幕亚洲精品乱码| 国产日韩一区二区三区在线| 国产精品久久观看| 久久天堂av| 伊人精品视频| 日韩高清中文字幕一区| 精品国产网站| 蜜臀91精品国产高清在线观看| 中文一区在线| 国产日韩欧美在线播放不卡| 精品99久久| 亚洲精品极品少妇16p| 视频一区日韩精品| 美女精品久久| 午夜久久美女| 欧美私人啪啪vps| 91亚洲人成网污www| 久久电影一区| 国产精品99精品一区二区三区∴| 尤物tv在线精品| 日韩精品1区2区3区| 成人片免费看| 日韩一区二区三免费高清在线观看| 国产精品丝袜xxxxxxx| 国产成人精品福利| 99热精品在线| 精品中文在线| 丝袜美腿一区二区三区| 久久婷婷激情| 国产亚洲综合精品| 欧洲一级精品| 国产成人精品三级高清久久91| 婷婷综合成人| 在线精品亚洲欧美日韩国产| 91麻豆精品激情在线观看最新| 国产亚洲亚洲| 好看的av在线不卡观看| 高清av一区| 九色porny丨国产首页在线| 久久久久久久欧美精品| 日产精品一区二区| 91视频精品| 久久久久伊人| 久久精品色播| 亚洲久久一区| 性欧美69xoxoxoxo| 国产尤物精品| 99riav国产精品| 国产suv精品一区| 精品国产aⅴ| 久久婷婷久久| 国产亚洲亚洲| 亚洲激情黄色| 蜜桃av一区二区| 红杏一区二区三区| 日韩毛片一区| 国产一区2区在线观看| 夜夜精品视频| 日韩av资源网| 欧美亚洲一区二区三区| 国产美女一区| 欧美日韩99| 久久精品青草| 日本不卡不码高清免费观看| 精品中国亚洲| 成人日韩在线| 日本免费在线视频不卡一不卡二| 人人精品久久| 91福利精品在线观看| 高潮久久久久久久久久久久久久| 久久伦理在线| 日韩欧美中文字幕电影| 国产精品第十页| 国产午夜久久av| 免费高清在线一区| 日韩1区2区3区| 岛国精品一区| 日本一区二区三区视频在线看| 国产女人18毛片水真多18精品| 日韩成人精品一区二区| 亚洲91久久| 精品日韩一区| 久久精品女人| 亚洲日本在线观看视频| 久久精品免费一区二区三区| 国产精品网在线观看| 免费精品视频| 福利视频一区| 日韩不卡一区二区三区| 久久久久.com| 国户精品久久久久久久久久久不卡| 蜜臀久久99精品久久久久宅男| 精品一区二区三区中文字幕| 日韩在线观看中文字幕| 欧美日韩色图| 国精品产品一区| 136国产福利精品导航网址| 日韩av片子| 日韩高清欧美激情| 免费日韩av片| 视频在线观看一区| 在线国产一区| 日韩中出av| 国产精品扒开腿做爽爽爽软件| 国产精品嫩模av在线| 欧美日韩激情在线一区二区三区| 亚洲欧洲av| 中文字幕在线视频网站| 日本久久二区| 亚洲国产一区二区在线观看| 久久av网站| 欧美综合另类| 最新中文字幕在线播放 | 国产一区二区三区久久| 精品一区二区三区免费看| 日韩在线欧美| 午夜av成人| 国产精品亚洲欧美一级在线| 欧美日韩亚洲一区二区三区在线| 日韩av一区二区三区四区| 好看的亚洲午夜视频在线| 欧美资源在线| 国产欧美一区二区三区国产幕精品| 国产精品久久观看| 亚洲专区视频| 久久久久.com| 国产精品久久久亚洲一区| 久久精品青草| 日韩高清一区在线| 在线精品亚洲欧美日韩国产| 免费看黄色91| 美女精品在线观看| 亚洲91在线| 成人一区而且| 蜜桃视频在线观看一区| 国产精品视频一区视频二区| 亚洲一区二区日韩| 亚洲永久字幕| 日韩影片在线观看| 国产精品jk白丝蜜臀av小说| 狠狠久久伊人中文字幕| 韩日一区二区| 久久久久久久久久久妇女| 亚洲韩日在线| 视频在线观看国产精品| 国产精品美女久久久| 激情五月色综合国产精品| 卡一精品卡二卡三网站乱码| 亚洲视频二区| 在线视频日韩| 午夜久久福利| 国产精品精品国产一区二区| 最新国产精品视频| 成人精品高清在线视频| 日韩二区在线观看| 美女毛片一区二区三区四区| 久久精品亚洲一区二区| 日韩一区免费| 亚洲手机在线| 成人久久一区| 国产 日韩 欧美一区| 99在线精品免费视频九九视| 成人在线丰满少妇av| 国产精品一区二区三区www|