利用reduce实现groupby

//基本版
var
groupBy = function(xs, key) { return xs.reduce(function(rv, x) { (rv[x[key]] = rv[x[key]] || []).push(x); return rv; }, {}); }; console.log(groupBy(['one', 'two', 'three'], 'length')); // => {3: ["one", "two"], 5: ["three"]}
//返回数组版本

function groupByArray(xs, key) {
    return xs.reduce(function (rv, x) { 
        let v = key instanceof Function ? key(x) : x[key]; 
        let el = rv.find((r) => r && r.key === v); 
        if (el) { 
            el.values.push(x);
        } else {
            rv.push({ key: v, values: [x] }); 
        }
        return rv;
    }, []);
} 

var arr=[
{Phase: "Phase 1", Step: "Step 1", Value: 15},
{Phase: "Phase 1", Step: "Step 2", Value: 35},
{Phase: "Phase 2", Step: "Step 1", Value: 55},
{Phase: "Phase 2", Step: "Step 2", Value: 75}
]

groupByArray(arr,"Step")

原文地址:https://www.cnblogs.com/wolbo/p/13541596.html