高阶函数(map,reduce,filter,flat)

438 阅读2分钟

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

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

·javascript对高阶函数原生支持

👠 一:map

  • map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。

  • map() 方法按照原始数组元素顺序依次处理元素。

注意:  map() 不会对空数组进行检测;map() 不会改变原始数组

1.  // map
2.  const arr = [12345];
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 = [1234555564];
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'age21 },
4.    { 'name''Mark'age28 },
5.    { 'name''Josn'age19 },
6.    { 'name''Jane'age31 },
7.    { 'name''Tony'age35 }
8.  ]
9.  let newAge = persons.filter(item => item.age > 21);
10.  console.log(newAge);

🫂 四:flat(扁平化多维数组->将多维数组变成一维数组)

1.  // flat
2.  let arr = [1234, [56, [78, [910, [1112, [1314]]]]]];
3.  let arr1 = arr.flat(Infinity); // Infinity(多维数组层次)
4.  console.log(arr1);