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)
结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
2020-07-01 前端解析excel表格