先提出问题
- 取出所有小于100的数字
- 将所有小于100的数字转换,全都X2
- 在2的数组上使所有数字相加,得出最终结果
//取出所有小于100的数字
const str1=[12,155,45,156,180,180,45,99];
let newList1=[],list1_len=0;
for (let i = 0; i < str1.length; i++) {
if(str1[i]<100)
{
newList1[list1_len++]=str1[i];
}
}
console.log(newList1);
//将所有小于100的数字转换,全都X2
let newList2=[],list2_len=0;
for (let i = 0; i < list1_len; i++) {
newList2[list2_len++]=newList1[i]*2;
}
console.log(newList2);
//在2的数组上使所有数字相加,得出最终结果
let list3_len=0,sum=0;
for (let i = 0; i < list2_len; i++) {
sum+=newList2[i];
}
console.log(sum);
filter
filter其实就是一个过滤的方法,它的参数主要是一个回调函数,它的返回值是一个布尔值类型。它为每一项运行给定方法,并将true的值全部返回。其实绕来绕去的,意思就是说它每一项都是要去调用该回调函数的,并将每一项的返回值返回。就如下面代码中,数组有8项,那么就会调用8次这个方法,并将满足条件的值返回给newList作为它的一项.直到8次调用完毕
const str1=[12,155,45,156,180,180,45,99];
let newList=str1.filter((item)=>{
return item<100
})
console.log(newList);
这里就是将小于100的数组中的值返回给newList,这就可以实现对应的第一个要求
map
map和forEach都用来遍历数组,其实两者功能差不多,只是map会返回操作的数组,而forEach不会返回值而已
newList=newList.map((item)=>{
return item*2
})
console.log(newList);
这里就实现了第二个要求
reduce
reduce的参数为一个回调函数和一个初始值,而它回调函数的参数是最终返回的值,当前项的值,当前项的索引和要操作的数组。
let sum=newList.reduce((total,cur)=>{
console.log(total);
return total+cur;
},0)
console.log(sum);
因此发现,如果给了初始值,那么会给它的返回值先赋值为0,如果不赋值,那么就直接获取下一次的返回值
因此,三个高级函数已经讲好了,那么细心的兄弟可能已经发现,这三个函数是都有返回值的,且返回值也是函数,那么有没有可能把他们写到一起来呢?
是有的,一行结束
sum=str1.filter((item)=>item<100).map((item)=>item*2).reduce((total,cur)=>total+cur);