国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題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關(guān)鍵字專題關(guān)鍵字專題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
當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

JavaScript數(shù)組方法的錯(cuò)誤使用例子

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:07:47
文檔

JavaScript數(shù)組方法的錯(cuò)誤使用例子

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

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

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

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

'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是一個(gè)很有用的函數(shù),它返回一個(gè)滿足過濾條件的新數(shù)組。正如其名字表達(dá)的含義,它是用來做過濾的。

但是,如果我們知道我們要的結(jié)果只有一個(gè)元素的時(shí)候,我就不建議使用它了。比如,如果我們的回調(diào)函數(shù)定義用一個(gè)唯一的ID來過濾,那么結(jié)果必然唯一了。在這個(gè)情況下,Array.filter會返回只有一個(gè)元素的數(shù)組。因?yàn)榧热荒芡ㄟ^一個(gè)特定的ID來查找,我們已經(jīng)確定只有一個(gè)元素了,那么使用數(shù)組就沒有意義。

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

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

'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

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

在前面的例子中,我們看到Array.find接受一個(gè)過濾函數(shù),返回滿足的元素。那么,如果我們要查找一個(gè)數(shù)組是否包含某個(gè)元素的時(shí)候,Array.find是否是最佳的方案呢?可能不是,因?yàn)樗祷氐氖窃鼐唧w的值,而不是布爾值。

我推薦大家使用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有點(diǎn)難以理解!但是,如果我們每次在同時(shí)使用Array.filter和Array.map的時(shí)候,你是否覺察到需要點(diǎn)東西,對不?

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

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

'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'] }
// ]

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

JavaScript數(shù)組方法的錯(cuò)誤使用例子

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

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 亚洲 欧美 自拍 另类 | 欧美 日韩 中文字幕 | 中文字幕一区二区三区不卡 | 国产美女视频黄a视频全免费网站 | 欧美日韩亚洲精品国产色 | 日韩在线二区 | 国产日韩欧美综合 | 欧美激情网站 | 亚洲国产精品综合久久一线 | 一久久 | 人禽性动交异族另类 | 91一区二区三区四区五区 | 国产免费播放 | 黄色在线观看网站 | 亚洲欧洲精品一区二区三区 | 国产高清一区二区三区视频 | 最新国产网址 | 亚洲狼人香蕉香蕉在线28 | 国产精在线 | 欧美日韩高清一区 | 91精品日本久久久久久牛牛 | 香蕉视频在线观看网站 | 在线欧美v日韩v国产精品v | 色老头久久久久 | 亚洲欧美日韩中文v在线 | 一区二区免费在线观看 | 天天操夜夜做 | 欧美韩国日本一区 | 中文字幕亚洲综合 | 亚洲激情在线观看 | 欧美日本一区二区三区 | 欧美亚洲韩国 | 国产成人乱码一区二区三区 | 久久精品国产一区二区三区 | 伊人久久中文字幕久久cm | 久久九九国产 | 免费国产视频 | 欧美成人免费高清视频 | 国产成人精品视频一区二区不卡 | 亚洲综合图片小说区热久久 | 日韩第三页 |