index.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /**
  2. * 县级(区县)信息
  3. * @param {Array} arr 总数组
  4. * @param {Number} code 县级(区县) code
  5. * @param {Number} level [0,1,2,3] 返回层级
  6. */
  7. exports.findAreaChild = function findAreaChild(arr, code, level) {
  8. return arr.filter(item => {
  9. // 四个直辖市 北京:11, 上海:31,天津:12,重庆市:50
  10. if (/(11|31|12|50)/.test(item.province)) {
  11. return (new RegExp(`^${code}`)).test(item.code) && item.town !== 0;
  12. }
  13. return (new RegExp(`^${code}`)).test(item.code) && item.town === 0 && item.area !== 0;
  14. }).map((item) => {
  15. return { ...item };
  16. })
  17. }
  18. /**
  19. * 序列化省市信息
  20. * @param {Array} arr 总数组
  21. * @return {Array} [序列化后的层级总数组]
  22. */
  23. exports.findCityChild = function findCityChild(arr, code, level) {
  24. return arr.filter(item => {
  25. if (/(70|81|82)/.test(item.province)) {
  26. return false;
  27. }
  28. // 四个直辖市 北京:11, 上海:31,天津:12,重庆市:50
  29. if (/(11|31|12|50)/.test(item.province)) {
  30. return (new RegExp(`^${code}`)).test(item.code) && item.area !== 0 && item.town === 0;
  31. }
  32. return (new RegExp(`^${code}`)).test(item.code) && item.city !== 0 && item.area === 0 && item.town === 0;
  33. }).map((item) => {
  34. if (level > 1) {
  35. const codeCom = /(11|31|12|50)/.test(item.province) ? `${code}${item.city}${item.area}` : `${code}${item.city}`;
  36. item.children = findAreaChild(arr, codeCom, level);
  37. }
  38. delete item.town;
  39. delete item.province;
  40. return {
  41. ...item,
  42. // code: /(11|31|12|50)/.test(code) ? item.area : item.city,
  43. }
  44. });
  45. }
  46. /**
  47. * 序列化 省市区信息 第一级
  48. * @param {Array} arr 总数组
  49. * @param {Number} level [0,1,2,3] 返回层级
  50. * @return {Array} [序列化后的总数组]
  51. */
  52. exports.sortProvince = function sortProvince(arr, level) {
  53. if (!level) level = 3;
  54. return arr.filter(item => item.city === 0 && item.area === 0 && item.town === 0)
  55. .map((item) => {
  56. if (level > 0) {
  57. item.children = findCityChild([...arr], item.province, level);
  58. }
  59. item.code = item.province;
  60. if (item.children && item.children.length === 0) delete item.children;
  61. delete item.province;
  62. delete item.city;
  63. delete item.area;
  64. delete item.town;
  65. return { ...item };
  66. });
  67. }