高阶函数

2021-05-12 22:22:34 Javascript 大约 2 分钟

1、高阶函数是对其他函数进行操作的函数,可以将它们作为参数或返回它们;

2、简单来说,高阶函数是一个函数,它接收函数作为参数或将函数作为输出返回;

# map方法

需求:创建一个新数组,其中的值是原数组的值的两倍

// 结果;
const arr = [1,2,3,4];
const arr1 = arr.map((item) => item * 2);
console.log(arr1)// [2,4,6,8]
1
2
3
4

# reduce方法

需求:创建一个新数组,并对数组中的值进行求和;

const arr = [1,2,3,4];
const sum = arr.reduce((a, b) => a + b, 0)
console.log(sum); // 10
1
2
3

需求:创建一个新数组,并对数组中的值进行去重

const arr = [1,2,3,3,3,3,4,3,4,5];
const arr2 = arr.reduce((prev, cur) => {
  prev.indexOf(cur) === -1 && prev.push(cur)
  return prev;
}, []);
console.log(arr2); [ 1, 2, 3, 4, 5 ]
1
2
3
4
5
6

# filter方法

需求:筛选数组中满足指定条件的数据;

let persons = [
  { name: 'peter', age: 21 },
  { name: 'mark', age: 28 },
  { name: 'josn', age: 19 },
  { name: 'jane', age: 31 },
  { name: 'tony', age: 35 },
]

let newAge = persons.filter(item => item.age > 21);
console.log(newAge);
// [
//   { name: 'mark', age: 28 },
//   { name: 'jane', age: 31 },
//   { name: 'tony', age: 35 }
// ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# flat方法

可以实现数组扁平化;将多维数组变为一维数组,该方法会返回新数组对原数组没有影响;

let arr = [1, 2, 3, 4, [5, 6, [7, 8, [9, 10, [11, 12, [13, 14]]]]]];
// 默认只会展平一层
let arr1 = arr.flat();
// 可以通过参数指定需要展平的层数
let arr2 = arr.flat(2);
// 如果不知道有多少层可以传入 Infinity 关键字 展平无限层
let arr3 = arr.flat(Infinity);
console.log(arr1, arr2, arr3);
1
2
3
4
5
6
7
8

# 高阶函数的意义;

  1. 将函数作为参数;

    // 参数为函数的高阶函数
    function foo (f) {
      // 判断实参是否为函数
      if ((typeof f) === 'function') {
          f();
      }
    }
    
    // 调用
    foo(function() {})
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
  2. 将函数作为返回值;

    // 返回值为函数的高阶函数;
    function foo() {
      return function () {}
    }
    
    // 调用;
    let f = foo();
    
    1
    2
    3
    4
    5
    6
    7
  3. 高阶函数的实际作用;

    const callback = (val) => {
      console.log(val);
    };
    
    const foo = (val, fn) => {
      if (typeof fn === 'function') {
          fn(val);
      }
    };
    
    foo('hello', callback)
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
上次编辑于: 2023年7月4日 09:36