开始学习es6时,对于数组的几个常用的API不是很清楚,经过一段时间的学习,不敢说已经非常熟悉,学习是一个漫长的过程,整理一下在使用这些API过程中的一些心得体会。
no.1 map
map函数可以看成一种映射函数,而且是一一映射,几个萝卜几个坑。
array.map(function(参数){
....
函数体
......
})
es6提出了箭头函数,所以也可以写成:
array.map((参数)=>{
....
函数体
......
})
例子:[1.2.3].map((x)=>{
return x+1;
}) //[2,3,4]
map适合用于对一个数组的每一个元素做一个相同的操作时,例如:每一个元素加上某一个值或者减去某一个值,这个时候map函数就该上场了。
no.2 filterfilter函数可以看成是一个过滤函数,就像一个筛子,筛去不符合条件的元素。
filter函数和map很相似,但它们之间有不同之处,起初在这两个函数之间犯了很多迷糊。filter与map的区别之一:filter函数需要返回一个true或者false,如果是true,才会返回这个元素,如果是false,则不返回。而map没有这一过程。
array.filter(function (参数){
...
函数体
...
})
或者:
array.filter((参数)=>{
...
函数体
...
})
例子:[1.2.3].filter((x)=>{
return x%2===0;
}) //[2]
fliter函数适合用于筛选一个数组中满足某一条件的元素,但要注意的是,fliter函数只是筛选功能,它不能对数组中的元素做其他操作,换句话说,就是不能改变数组的元素。
no.3 reduce
reduce函数可以理解成一个迭代函数。
array.reduce(function (previous,current,index,array){
...
函数体
...
},[initialValue])
也可以写成:
array.reduce( (previous,current,index,array)=>{
...
函数体
...
},[initialValue])
例子:
[1,2,3,4].reduce((previous,current)=>{
return previous+current;
}) //10
我觉得reduce函数的特殊之处就在于它的回调函数,四个参数分别代表:之前值,当前值,索引值,数组本身。这里的previous值取决于[initialValue],如果[initialValue]指定时,则作为previous的初始值,也可以为空数组[],如果缺省的话,则将数组的第一个元素作为previous的初始值,下一次循环时,之前值就是上一次的当前值,而当前值会变成下一个索引所对应的元素,依次类推。no.4 find
find函数的即查找函数。
array.find((参数)=>{
...
函数体(查找条件)
...
})
例子:
[1,2,3,4].find((value)=>{
return value>2;
}) //3
要注意的是find函数在查找时,一旦数组中的某一个元素符合查找条件,则立即返回。