今天学Vue的时候,视频里CodeWhy老师讲了filter,map,reduce三个函数的使用。
以下是自己的理解:
这三个函数一般是对数组进行处理
fliter函数用于筛选,当return ture时表示通过筛选,数组中的数(item)将会被返回一个新的数组
let arr=[1,2,3,4,5,6,7,8,9,10];
let newarr = arr.filter(function(item){
return item%2==0;
})
// newarr=[2,4,6,8,10]
map函数用于对数组中每一个数单独进行计算处理,并将计算之后的数返回一个新的数组
let newarr2 =newarr.map(function(item){
return item * 2;
})
//newarr2 = [4,8,12,16,20]
reduce函数用于对数组中所有数进行总的计算处理,例如求所有数和,乘
let result = newarr2.reduce((function(sign,item){
return sign * item;
}),1)
//其中1为sign的初始值,可以不写
//result = 1 * 4 * 8 *12 * 16 * 20 =122880
所以将上面的函数用一行写法为:
let arr=[1,2,3,4,5,6,7,8,9,10];
console.log(arr.filter(function(item)
{return item%2==0}).map(function(item)
{return item*2}).reduce((function(sign,item){
return sign * item;}),1));
//箭头函数写法为:
console.log(arr.filter(item => item%2==0).map(item =>item * 2).reduce((sign,item) =>sign * item));
疑惑:这个reduce用箭头函数在这里很神奇,sign的初始值好像会根据我的return里用的运算符号改变,
sign * item 时初始值为1(或者就根本没有赋初始值直接开始了数组里的乘法运算?),sign + item 和sign - item时初始值为0?
猜测:reduce中的sign可以不用赋初始值,函数使用时会自动把数组中第1个值赋给sign,然后再对后面的数开始计算。