原数据:
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)
结果: