三个数组的reduce方法的应用

132 阅读1分钟

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
},{})

// groupedProduct :
// { 
//   Book: [
//     { type: "Book", name: "BOOK1 NAME", price: 39 }, 
//     { type: "Book", name: "BOOK2 NAME", price: 69 }
//   ], 
//   Food: [{ type: "Food", name: "FOOD NAME", price: 24 }] 
// }

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)
//输出:150

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))
//输出:150  ((5*3)*5)*2