tree/setRepeatObj.js

  1. /**
  2. * @module Tree/setRepeatObj
  3. * @description 将数组重复元素归类组装成树形结构
  4. * @param {Array} data 需要组装的数据
  5. * @param {String} repeatKey 重复元素的key
  6. * @param {String} majorKey 归类到重复元素的key
  7. * @return {Array} 树形结构
  8. *
  9. * @example
  10. * setRepeatObj({data: [{name:1, area: 1}, {area: 1, name: 2}]})
  11. * =>
  12. * [ { area: '1', name: [ 1, 2 ] } ]
  13. */
  14. function setRepeatObj({ data, repeatKey = 'area', majorKey = 'name' }) {
  15. if (!Array.isArray(data)) return data;
  16. let _arr = data;
  17. let m = {}
  18. for (let i = 0; i < _arr.length; i++) {
  19. let t = _arr[i]
  20. if (!m[t[repeatKey]]) {
  21. m[t[repeatKey]] = []
  22. }
  23. m[t[repeatKey]].push(t[majorKey])
  24. }
  25. let arrs = []
  26. for (let key in m) {
  27. arrs.push({ [repeatKey]: key, [majorKey]: m[key] })
  28. }
  29. return arrs;
  30. }
  31. console.log(setRepeatObj({ data: [{ name: 1, area: 1 }, { name: 2, area: 1 }] }))
  32. // export default setRepeatObj;