·高阶函数:是对其他函数进行操作的函数,可以将它们作为参数或返回他们
·简单来说,高阶函数是一个函数,它接收函数作为参数或将函数作为输出返回
·javascript对高阶函数原生支持
👠 一:map
-
map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
-
map() 方法按照原始数组元素顺序依次处理元素。
注意: map() 不会对空数组进行检测;map() 不会改变原始数组。
1. // map
2. const arr = [1, 2, 3, 4, 5];
3. const arr3 = arr.map(function (item, index, arr) {
4. return item * 2;
5. })
6. console.log(arr3); // [2, 4, 6, 8, 10]
7. // es6 箭头函数
8. arr.map(item => item * 2);
🐻 二:reduce
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
reduce() 可以作为一个高阶函数,用于函数的 compose。
注意: reduce() 对于空数组是不会执行回调函数的。
1. // reduce
2. let arr1 = [1, 2, 3, 4, 5, 5, 5, 5, 6, 4];
3. let arr2 = [1,2,3,4,5];
4. let sum = arr2.reduce((prev, cur) => {
5. return prev + cur;
6. }, 1); // 1是初始值,代表prev = 1 开始
7.
8. console.log(sum); // 16
9.
10. // 利用reduce数组去重
11. let newArr = arr1.reduce((prev, cur) => {
12. prev.indexOf(cur) === -1 && prev.push(cur);
13. return prev;
14. }, []) // []是初始值,代表prev是一个数组
15. console.log(newArr); // [1, 2, 3, 4, 5, 6]
🥤 三:filter
filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
注意: filter() 不会对空数组进行检测;filter() 不会改变原始数组。
1. // filter
2. let persons = [
3. { 'name': 'Peter', age: 21 },
4. { 'name': 'Mark', age: 28 },
5. { 'name': 'Josn', age: 19 },
6. { 'name': 'Jane', age: 31 },
7. { 'name': 'Tony', age: 35 }
8. ]
9. let newAge = persons.filter(item => item.age > 21);
10. console.log(newAge);
🫂 四:flat(扁平化多维数组->将多维数组变成一维数组)
1. // flat
2. let arr = [1, 2, 3, 4, [5, 6, [7, 8, [9, 10, [11, 12, [13, 14]]]]]];
3. let arr1 = arr.flat(Infinity); // Infinity(多维数组层次)
4. console.log(arr1);