es6 數(shù)組處理 filter蒲犬、 find、map原叮、some、every擂送、reduce 之間的區(qū)別

@[TOC](es6 數(shù)組處理 filter、 find达布、map团甲、some、every躺苦、reduce 之間的區(qū)別)

一身腻、 filter

數(shù)組的過濾或篩選功能匹厘,根據(jù)篩選條件返回一個包含符合條件元素的新數(shù)組嘀趟,不影響原數(shù)組,篩選條件寫在一個函數(shù)中

示例:

1.創(chuàng)建一個數(shù)組愈诚,判斷數(shù)組中是否存在某個值
const array=[
  {id:1,name:'javascript',date:'2021-06-01'},
   {id:2,name:'css',date:'2021-06-01'},
   {id:3,name:'vuejs',date:'2021-06-01'}
]
const newArray=array.filter(item=>item.id==3);
console.log(newArray); // [{id:3,name:"vuejs",date:"2021-06-01"}]
示例1 輸出結(jié)果圖
2. 也可通過上面的方法過濾掉id!=3的項
const array=[
  {id:1,name:'javascript',date:'2021-06-01'},
   {id:2,name:'css',date:'2021-06-01'},
   {id:3,name:'vuejs',date:'2021-06-01'}
]
const newArray=array.filter(item=>item.id!=3);
console.log(newArray);
// 輸出結(jié)果為:
// [
//  {id:3,name:"vuejs",date:"2021-06-01"},
//  {id:3,name:"vuejs",date:"2021-06-01"}
// ]
示例2的輸出結(jié)果圖
3.去掉空數(shù)組空字符串、undefined炕柔、null

去空字符串*

const array=['A','B','','D','','F']
const newArray=array.filter(item=>item);
console.log(newArray); //["A","B","D","F"]

去 undefined*

const array=['a','b','c','d',undefined,'f','g',undefined,'i']
const newArray=array.filter(item=>item);
console.log(newArray); //["a","b","c","d","f","g","i"]

去 null*

const array=[1,2,3,4,null,6,7,null,9]
const newArray=array.filter(item=>item);
console.log(newArray); //[1,2,3,4,6,7,9]
4.去掉數(shù)組中不符合項
var array = [20,80,50,96,40]
var newArray = array.filter(item => item>40)  
console.log(newArray); //[80,50,96]
5.過濾不符合項
var array = ['20','60','33','77','42']
var newArray = array.filter(item => item.indexOf('2')<0) 
console.log(newArray); //["60","33","77"]
6.數(shù)組去重
var arr = [1, 2, 2, 3, 4, 5, 5, 6, 7, 7,8,8,0,8,6,3,4,56,2];
var arr2 = arr.filter((x, index,self)=>self.indexOf(x)===index)  
console.log(arr2); //[1, 2, 3, 4, 5, 6, 7, 8, 0, 56]
7.數(shù)組去重es6
var arr=[1,2,1,'1',null,null,undefined,undefined,NaN,NaN]
let res=Array.from(new Set(arr));//{1,2,"1",null,undefined,NaN}
//or
let newarr=[...new Set(arr)]

二匕累、 find 和 findIndex

find

數(shù)組實例的find方法陵刹,用于找出第一個符合條件的數(shù)組成員欢嘿。它的參數(shù)是一個回調(diào)函數(shù),所有數(shù)組成員依次執(zhí)行該回調(diào)函數(shù)炼蹦,直到找出第一個返回值為true的成員,然后返回該成員掐隐。如果沒有符合條件的成員,則返回undefined斗搞。

var array = ['60','33','77','20','42']
var newArray = array.find(item => item<40) 
console.log(newArray); //33

find方法的回調(diào)函數(shù)可以接受三個參數(shù)慷妙,依次為當(dāng)前的值、當(dāng)前的位置和原數(shù)組膝擂。

[1, 5, 10, 15].find(function(value, index, arr) {
  return value > 9;
}) // 10
findIndex

數(shù)組實例的findIndex方法的用法與find方法非常類似,返回第一個符合條件的數(shù)組成員的位置架馋,如果所有成員都不符合條件,則返回-1萍启。

[1, 5, 10, 15].findIndex(function(value, index, arr) {
  return value > 9;
}) // 2

這兩個方法都可以接受第二個參數(shù),用來綁定回調(diào)函數(shù)的this對象勘纯。
find函數(shù)接收了第二個參數(shù)person對象,回調(diào)函數(shù)中的this對象指向person對象驳遵。

function f(v){
  return v > this.age;
}
let person = {name: 'John', age: 20};
[10, 12, 26, 15].find(f, person);    // 26

另外淫奔,這兩個方法都可以發(fā)現(xiàn)NaN堤结,彌補了數(shù)組的indexOf方法的不足。
indexOf方法無法識別數(shù)組的NaN成員竞穷,但是findIndex方法可以借助Object.is方法做到。

[NaN].indexOf(NaN)
// -1
[NaN].findIndex(y => Object.is(NaN, y))
// 0

三妒蔚、 map

map方法:可以簡單的理解為映射

 var arr=[1,2,3,4]; 
 console.log( arr.map((n)=>n*n) );//[1, 4, 9,16] 
 console.log( arr.map((n)=>n-1) );//[0, 1, 2, 3]

數(shù)組的映射月弛,返回一個新數(shù)組,其值是通過函數(shù)處理過的值

let arr = [2,3,5,6]
let arr1 = arr.map(function(item){
   return item +1;
})
console.log(arr1)//[3,4,6,7]  let arr = [2,3,5,6,7,8]

let arr1 = arr.map(function(item){
   return item >5;
})
console.log(arr1)//[false,false,false,true,true,true]

四帽衙、 some

some() 方法會依次執(zhí)行數(shù)組的每個元素:

如果有一個元素滿足條件贞绵,則表達式返回true , 剩余的元素不會再執(zhí)行檢測。   
如果沒有滿足條件的元素榨崩,則返回false

let arr = [2, 4, 6, 8]; 
let flag = arr.some(function(item) {
    return item > 5 
}); 
console.log(flag); //true 

五、 every

every()檢測數(shù)組中的所有元素是否都滿足函數(shù)的中的篩選條件
都滿足返回true
否則返回false

let arr = [2, 4, 6, 8];
let flag = arr.every(function(item) {
    return item > 6 
}); 
console.log(flag); //false ```

六翩剪、 reduce

從左到右累加數(shù)組中的值彩郊,最后得到的仍是一個值

 let arr = [2,3,5,6,7,8,'a'] 
 let arr1 =  arr.reduce(function(val,item,index,origin){
  //val是累加值,item是當(dāng)前值秫逝,index下標(biāo)從1開始,arr[0]默認(rèn)為第一次的累加值违帆,origin是數(shù)組本身
  console.log(val,item,index,origin)
  return val+item 
 }) 
 console.log(arr1)// '31a'
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末刷后,一起剝皮案震驚了整個濱河市的畴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌抒线,老刑警劉巖渣慕,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異逊桦,居然都是意外死亡,警方通過查閱死者的電腦和手機强经,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門匿情,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人炬称,你說我怎么就攤上這事×崆” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵棘利,是天一觀的道長朽缴。 經(jīng)常有香客問我善玫,道長不铆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任只洒,我火速辦了婚禮劳坑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己涝开,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布拄养。 她就那樣靜靜地躺著银舱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪寻馏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天顽染,我揣著相機與錄音,去河邊找鬼粉寞。 笑死藏澳,一個胖子當(dāng)著我的面吹牛仁锯,可吹牛的內(nèi)容都是我干的翔悠。 我是一名探鬼主播野芒,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼撮抓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起丹拯,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤荸恕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后融求,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡县昂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了审洞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡芒澜,死狀恐怖叠国,靈堂內(nèi)的尸體忽然破棺而出辫塌,到底是詐尸還是另有隱情西设,我是刑警寧澤察绷,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站施无,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏猾骡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一幢哨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧捞镰,春花似錦、人聲如沸岸售。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽木羹。三九已至解孙,卻和暖如春抛人,著一層夾襖步出監(jiān)牢的瞬間弛姜,已是汗流浹背妖枚。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留荠商,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓莱没,卻偏偏與公主長得像酷鸦,于是被迫代替她去往敵國和親饰躲。 傳聞我的和親對象是個殘疾皇子臼隔,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354