前端开发核心知识进阶 —— Array.prototype.reduce衍生
reduce方法的使用
arr.reduce(callback[,initialValue])
- callback方法包含以下4个参数:
—— previousValue 表示callback函数‘上一次’的返回值
—— currentValue 表示数组遍历正在处理的元素
—— currentIndex 可选元素,表示currentValue在数组中对应的索引。
—— array 可选参数,表示调用reduce方法的数组 - initialValue 可选参数,表示第一次调用callback时的第一个参数。如果没有提供initialValue,那么数组中的第一个元素将作为callback的第一个参数
通过reduce实现runPromiseInSequence
作用:按照顺序执行promise
const runPromiseInSequence = (array,value) => array.reduce(
(promiseChain,currentFunction) => promiseChain.then(currentFunction),
Promise.resolve(value)
)
用法
const fn1 = () => new Promise((resolve,reject) => {
setTimeout(() => {
console.log('p1 running')
resolve(1)
},1000)
})
const fn2 = () => new Promise((resolve,reject) => {
setTimeout(() => {
console.log('p2 running')
resolve(2)
},1000)
})
const runPromiseInSequence = (array,value) => array.reduce(
(promiseChain,currentFunction) => promiseChain.then(currentFunction),
Promise.resolve(value)
)
runPromiseInSequence([fn1,fn2],''init')
// p1 running
// p2 running
only
作用:根据数组返回含有对应属性得对象
const only = (obj,keys) => {
return keys.reduce((pre,cur) => {
return {
...pre,
[cur]:obj[cur]
}
},{})
}