js根据某属性对json数组分类

原数据:

复制代码
        var arr = [
            {name: '张三', age: 23, work: '计算机'},
            {name: '王五', age: 29, work: '计算机'},
            {name: '张兴', age: 30, work: '考古'},
            {name: '刘豆豆', age: 23, work: '物理'},
            {name: '李铁锤', age: 20, work: '英语'},
            {name: '毛豆豆', age: 20, work: '英语'},
            {name: '王五5', age: 23, work: '计算机'},
        ];
复制代码

需求:

统计一共有几种学科,哪个学科人数 最多,并给其分类。

方法一:

复制代码
        let maxCount = 0;
        let allGroups = {}
        const group = arr.reduce((prev, curr) => {
            if (!prev[curr.work]) {
                prev[curr.work] = 1;
                allGroups[curr.work] = []
            } else {
                prev[curr.work] += 1;
            }
            allGroups[curr.work].push(curr);
            maxCount = Math.max(maxCount, prev[curr.work]);
            return prev;
        }, {});
        const groups = Object.keys(group);
        console.log(allGroups)
        console.log(`总共有${groups.length}科目;${groups.find((g) => group[g] === maxCount)}科目最多`);
复制代码

结果:

 

 方法二:

复制代码
        const hashCout = {}
        const newObj = arry.reduce((prev, curr) => {
            if (curr && !prev[curr.work]) {
                prev[curr.work] = [curr]
                hashCout[curr.work] = 0
            } else {
                prev[curr.work].push(curr)
            }
            hashCout[curr.work]++
            delete curr.work
            return prev
        }, {})
        console.log(newObj)
        console.log("科目数:" + Object.keys(newObj).length)
        for (let i in hashCout){
            if (hashCout[i]==(Math.max(...Object.values(hashCout)))){
                console.log("人数最多的科目:" + i)
            }
        }
复制代码

结果:

需求2:

如果只是光根据属性:work对其分类则代码如下

        const map = new Map()
        arry.forEach(item => map.get(item.work) ? map.get(item.work).push(item) : map.set(item.work,[item]))
        console.log(map)

结果:

 

 

posted @   爱喝酸奶的吃货  阅读(613)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
历史上的今天:
2020-07-01 前端解析excel表格
点击右上角即可分享
微信分享提示