手动实现lodash 的 groupBy

1,185 阅读1分钟

先简单说明一下groupBy做了什么

groupBy() 将一个无序的对象数组根据数组中的某一项数据进行整理

    // 例如这样的一个数组
    const disorderArr = [
        {name: 'xiaohua', gender: 'man'},
        {name: 'xiaoming', gender: 'man'},
        {name: 'dazhuang', gender: 'man'},
        {name: 'xiaohong', gander: 'women'}
        {name: 'hanmeimei', gander: 'women'}
        {name: 'xiaxue', gander: 'women'}
    ]
    // 当有一个需求,我们需要将 学生们按照性别分配。我们就需要去整理这个数组
    function groupBy(disorderArr) {
        const orderListByGender = Array.from(
            new Set(disorderArr.map(obj => obj.gender))
        )
        const genderList = orderListByGender.map(items => {
            const groupItem = [items, []]
            disorderArr.forEach(val => {
                if(val.gender === groupItem[0]) {
                    groupItem[1].push(val)
                }
            })
            return groupItem
        })
        
        return genderList
    }

    // 经过整理以后得到的就是一个二维数组
    [        ['man', [            {name: 'xiaohua', gender: 'man'},            {name: 'xiaoming', gender: 'man'},            {name: 'dazhuang', gender: 'man'},        ]],
        ['women', [            {name: 'xiaohong', gander: 'women'}            {name: 'hanmeimei', gander: 'women'}            {name: 'xiaxue', gander: 'women'}        ]],
    ]
    
    // 有需要的同学还可以 通过 Object.fromEntries 将这个键值对数组转化为对象