JavaScript 高阶函数小结
js的函数其实都是指向某个变量,既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另外一个函数作为参数,这种函数就称之为高阶函数。
Arr扩展有:forEach、map、reduce filter sort every some find findIndex
测试数据
let arr = [1, 2, 34, 5];
let obj = { age: 1, name: "111" };
forEach
允许将一个函数作为参数传递给数组的每个元素,并对每个元素执行该函数, return 没有返回值
arr.forEach((item,index, arr1)=>{console.log(item, index);arr1.push(item)
})Object.keys(obj).forEach((item,index)=>{console.log(item, index, obj[item]);
})
map
map 可以对数组的每个元素调用指定的回调函数,并返回包含结果的数组,返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值
let arr1 = arr.map((item,index)=>{return item+1;
})
console.log(arr1);
reduce
该方法接收一个函数作为累加器,数组中的每个值(从左到右)都会被该函数处理,并被累加到累加器中
该方法会从数组的第一个元素开始,一直到最后,所以会改变累加器的值。最终返回累加器的最终值
累加器的初始值是reduce方法的第二个参数,如果该参数省略,那么就会使用数组的第一个元素作为累加器的初始值
let res = arr.reduce((preVal, curVal, curIndex)=>{console.log(curIndex);return preVal+curVal;
})
console.log(res);
filter
顾名思义,用于过滤数组元素,返回过滤符合要求元素组成的数组
把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素
方法会将数组元素依次传入一个回调函数,在回调函数中判断元素是否符合指定条件,若符合则返回。
let arr1 = arr.filter((item,index)=>{return item>3;
})
console.log(arr1);
sort
对数组元素进行排序的方法
该方法默认不传参数,按照字符编码顺序进行排序,排序顺序可以是字母或数组
let arr1 = arr.sort();
console.log(arr1);
// ---------------
let arr2 = arr.sort((a, b)=>{if(a-b>0){return 1;//升序}else if(a-b<0){return -1;//降序}return 0;//相等})
console.log(arr2);
every
用来检测数组中所有元素是否满足指定的条件
every接收一个函数作为测试条件,数组的每一个元素都会被这个函数处理,如果所有的元素满足测试条件,则返回true,否则返回false
判断数组的每一项是否满足条件,只有所有项都满足条件,才会返回true
let result = arr.every((item,index)=>{return item>3;//数组每一项必须符合这个要求
})
console.log(result);
some
判断数组中是否存在满足条件的元素,只要存在一项,就返回true
let res = arr.some((item, index) => {return item > 3;
});
console.log(res);
find
该方法返回数组中第一个符合条件的元素值
let val = arr.find((item, index)=>{return item >3;
})
console.log(val);
findIndex
该方法返回数组中第一个符合条件元素的位置索引
let index = arr.findIndex((item, index) => {return item >3;
})
console.log(index);