在进行遍历的时候for循环给我一种很麻烦的感觉。而我先发,for里一般都会加一个if判断。这样在后期代码读取的时候很头大。代码很长。
然而。filter函数,map函数,reduce函数就能解决这个问题,现在通过一个例子来简单说明:
现在我们有个数组n,我需要对这个数组进行要求:
- 把数组中小于100的找出来
- 把新的数组的每个数乘以2
- 求出总和
我们先用原来的方法
let n=[20, 40,333,222,666,30,70];
let newNums=[];
for(let i of n){
if (i<100){
newNums.push(i)
}
}
//[20,40,30,70]
console.log(newNums);
let newNums2=[];
for (let i of newNums){
newNums2.push(i * 2)
}
//[40, 80, 60, 140]
console.log(newNums2)
let total=0;
for (let i of newNums2){
total += i;
}
//320
console.log(total)
使用高级函数
let newNums = n.filter(function (x) {
return x<100;
})
console.log(newNums);
let newNums2 = newNums.map(function (x) {
return x * 2;
})
console.log(newNums2);
let total = newNums2.reduce(function (preValue, x) {
return preValue + x;
},0)
console.log(total);
高级函数化简1
let total = n.filter(function (x) {
return x<100;
}).map(function (x) {
return x * 2;
}).reduce(function (preValue, x) {
return preValue + x;
},0)
console.log(total);
高级函数化简2
let total = n.filter(x => x<100).map(x => x*2).reduce((preValue,x) => preValue + x);
console.log(total);
通过的上边的例子。给我的第一感觉是代码减少了。让我能看的很舒服了。
现在我们来说说这个三函数是干嘛的吧。
filter函数
filter 读音:[ˈfɪltə®],意思是:滤器,过滤器。从意思上我们就可以知道,这个函数是帮我们过滤掉数组中不要的数据。
filter中的回调函数有个要求,必须返回一个Boolean值
以上的例子来说,若返回一个true,函数内部就会自动将这次回调的x加入到一个新的数组中。若返回一个false则函数内部会过滤到x。
map函数
map 读音:[mæp],
map是返回一个经过处理后的新数组,但是原来的数组不会改变。
意思是在遍历数组的时候进行一些运算。并且返回一个新的数组。
reduce函数
reduce 读音:[rɪˈdjuːs],对数组中的所有元素调用指定的回调函数。该回调函数的返回值为累积结果,并且此返回值在下一次调用该回调函数时作为参数提供。
end