暑期前端训练day3
js/ts 高阶函数复习
常见的高阶函数一般有以下几个:map、filter、forEach、reduce、sort、some、every、find、findIndex,并且都是针对数组的。
高阶函数:
高阶函数的注意事项:
(1) 都是数组内的方法
(2) 性能问题,比传统的for稍慢。
(3) 内部回调的this的绑定不确定,需要自己显式绑定。
(1) reduce函数
本质就是一个累加器,可以帮助我们实现一种“累加”操作。
const arr = [1, 2, 3, 4]const su = arr.reduce((pre, cur, index, arr) => {return pre + cur
}, 0) // su = 10
上述操作实现了最简单的一种用法,现在我们通过这个来描述一下每个参数,Array.Prototype.reduce(callback, 初始值),初始值肯定是最先定义的,callback的参数为:
pre: 上一次执行回调函数的结果, 如果是第一次就使用初始值。
cur: 当前索引到的值。
index: 当前的索引
arr: 数组对象
最后一次执行回调的结果就是返回值。
还要一个复杂的场景,需要用到其他的回调进行链式调用,可以看看最终输出什么。
const obj = {name: "cjy", age: 18, handsome: true, strong: true
}
const newObj = Object.keys(obj).filter((key, idx, arr) => { if(key !== 'handsome' || key !== 'strong') return false return true
}).reduce((preObj, key, idx, arr) => {return {...preObj, [key]: obj[key]}
}, {})
(2) sort函数
这个函数很有意思,对于c/c++的sort的回调,例如:
#include<bits/stdc++.h>
using namespace std; int main() {int q[] = {3, 2, 4, 1, 5}; sort(q, q + 5, [](int x, int y) => {// true的排在前,false排在后return x < y // x > y })return 0;
}
但是js的:
let arr = [3, 5, 4, 1, 2]
arr.sort((a, b) => {// 当是返回负数的时候,a在b前。// 否则额a在b后。// 为0位置不变。// 并且排序具有稳定性。return a - b
})
个人觉得最难的就是这几个了,其他的就是依葫芦画瓢,可以举一反三。