最近算是和JS剛上了,用到數(shù)組的時(shí)候也比較多并巍,每次在要遍歷數(shù)組的時(shí)候我都要一個(gè)個(gè)試目木,看哪個(gè)比較適用于我當(dāng)前的需要,一直沒(méi)太明白其中的區(qū)別懊渡,今天又遇上刽射。。剃执。就在此總結(jié)一下吧誓禁!
map、forEach忠蝗、filter现横、some、every
我們就一個(gè)一個(gè)來(lái)看吧
map
map方法對(duì)數(shù)組的所有成員依次調(diào)用一個(gè)函數(shù)阁最,根據(jù)函數(shù)結(jié)果返回一個(gè)新數(shù)組戒祠,不改變?cè)紨?shù)組。
map方法接受兩個(gè)參數(shù)速种,第一個(gè)參數(shù)為函數(shù)姜盈,第二個(gè)為參數(shù)為函數(shù)中的this對(duì)象。
所接受的函數(shù)可以有三個(gè)參數(shù)配阵,第一個(gè)是當(dāng)前遍歷的元素馏颂,第二個(gè)是當(dāng)前元素的索引示血,第三個(gè)是原始數(shù)組對(duì)象。
const arr = ['a', 'b', 'c', 'd']
const newArr = [1,2,3,4].map((item, index, o) => {
return item + this[index] + o[index];
}, arr)
//newArr = ['1a1', '2b2', '3c3', '4d4']
forEach
forEach方法對(duì)數(shù)組的所有成員依次調(diào)用一個(gè)函數(shù)救拉,與map方法基本相似难审,唯一的區(qū)別是 forEach沒(méi)有返回值,也不會(huì)改變?cè)紨?shù)組亿絮。
注意告喊,forEach方法無(wú)法中斷執(zhí)行,總是會(huì)將所有成員遍歷完派昧。如果希望符合某種條件時(shí)黔姜,就中斷遍歷,要使用for循環(huán)蒂萎。
let str = '';
[1,2,3,4].forEach( item => {
str += item;
})
//str = '1234'
filter
filter方法的參數(shù)是一個(gè)函數(shù)秆吵,所有數(shù)組成員依次執(zhí)行該函數(shù),將返回結(jié)果為true的成員組成一個(gè)新數(shù)組返回五慈。該方法不會(huì)改變?cè)瓟?shù)組纳寂。
const newArr = [1,2,3,4].filter( item => {
return item > 2;
})
//str = [3, 4]
some
some方法的參數(shù)是一個(gè)函數(shù),返回一個(gè)布爾值豺撑。所有數(shù)組成員依次執(zhí)行該函數(shù)并返回一個(gè)布爾值烈疚,若有一個(gè)成員執(zhí)行該函數(shù)后返回true,則some方法返回true,否則返回false聪轿。
const a = [1,2,3,4].some( item => {
return item > 2;
})
//a = true
const b = [1,2,3,4].some( item => {
return item > 4;
})
//b = false
every
every與some方法相似爷肝,但規(guī)則是當(dāng)所有數(shù)組成員的返回值都是true時(shí),才返回true陆错,否則false灯抛。
const a = [1,2,3,4].every( item => {
return item > 0;
})
//a = true
const b = [1,2,3,4].every( item => {
return item > 1;
})
//b = false