1. let arr = [
    2. { 'country': '国内', 'reputation': '985', 'university': '北京大学', 'university_id': 'beijig' },
    3. { 'country': '国内', 'reputation': '211', 'university': '清华大学', 'university_id': 'qinghua' },
    4. { 'country': '国内', 'reputation': '985', 'university': '浙江大学', 'university_id': 'zhejiang' },
    5. { 'country': '国内', 'reputation': '211', 'university': '武汉大学', 'university_id': 'wuhan' },
    6. { 'country': '国内', 'reputation': '其它', 'university': '邯郸大学', 'university_id': 'handan' },
    7. { 'country': '国内', 'reputation': '其它', 'university': '沧州大学', 'university_id': 'cangzhou' },
    8. { 'country': '国外', 'reputation': '其它', 'university': '哈弗大学', 'university_id': 'hafu' },
    9. { 'country': '国外', 'reputation': '其它', 'university': '剑桥大学', 'university_id': 'jianqiao' },
    10. { 'country': '国外', 'reputation': '其它', 'university': '牛津大学', 'university_id': 'niujin' }
    11. ]
    1. function groupBy(arr,...groupKeys){
    2. //arr是输入的数组,groupKeys是后期要区分的key值
    3. const [key,...restGroupKeys] = groupKeys;
    4. //key是一维区分的值
    5. const groupObj = Object.entries(arr.reduce((result,item)=>{
    6. //对数组对象累加
    7. //Object.entries 方法返回一个给定对象自身可枚举属性的键值对数组
    8. //arr.reduce 对数组对象累加
    9. const {[key]: grouKey,...restProps} = item;
    10. // 取第一个key值作为区分一维数组的键
    11. const list = result[grouKey] = result[grouKey]||[];
    12. // 判断一维key值是否存在,如果存在
    13. list.push(restProps)
    14. // 给一维数组加二维属性
    15. return result;
    16. },[]))
    17. return groupObj.map(([groupKey, children])=>{
    18. return {
    19. [key]: groupKey,
    20. children: restGroupKeys.length ? groupBy(children, ...restGroupKeys) : children
    21. //判断是否是最后一层,如果是返回自身,否则继续递归执行
    22. }
    23. })
    24. }
    25. var arr1 = groupBy(arr, 'country', 'reputation');