1. 对象数组按照属性归类
let ProductList = [
{ type: "Book", name: "BOOK1 NAME", price: 39 },
{ type: "Food", name: "FOOD NAME", price: 24 },
{ type: "Book", name: "BOOK2 NAME", price: 69 }
]
let groupedProduct = ProductList.reduce((prev,item)=>{
if(!prev[item.type]) prev[item.type] = []
prev[item.type].push(item)
return prev
},{})
2. 按顺序执行Promise
const p1 = a => Promise.resolve(a * 2)
const p2 = a => Promise.resolve(a * 5)
const p3 = a => Promise.resolve(a * 3)
let num = 5;
((a) => {
[p1, p2, p3, console.log].reduce(
async (p, t) => Promise.resolve(t(await p)),
Promise.resolve(a)
)
})(num)
3. compose函数
const f1 = a => a * 2
const f2 = a => a * 5
const f3 = a => a * 3
function compose(...fns) {
if (fns.length === 0) return f => f;
if (fns.length === 1) return fns[0];
return fns.reduce((prev, item) => (...args) => prev(item(...args)))
}
let reducer = compose(f1, f2, f3)
console.log(reducer(5))