Browse Source

refactor: 将省或自治区直辖区县数据视为第二级(城市)数据

closes #18
modood 7 years ago
parent
commit
5980752b6a
4 changed files with 17 additions and 5 deletions
  1. 0 0
      dist/pc-code.json
  2. 0 0
      dist/pc.json
  3. 12 3
      scripts/fmt.js
  4. 5 2
      test/json.js

File diff suppressed because it is too large
+ 0 - 0
dist/pc-code.json


File diff suppressed because it is too large
+ 0 - 0
dist/pc.json


+ 12 - 3
scripts/fmt.js

@@ -11,7 +11,7 @@ const streets = require(path.resolve(__dirname, '../dist/streets.json'))
 
 ;(function () {
   console.log('[1/4] 正在导出 “省份、城市” 二级联动数据...')
-  const [pc, pcC] = getAddressPC(provinces, cities)
+  const [pc, pcC] = getAddressPC(provinces, cities, areas)
   out('pc', pc)
   out('pc-code', pcC)
 
@@ -33,7 +33,7 @@ const streets = require(path.resolve(__dirname, '../dist/streets.json'))
  * @Author   https://github.com/modood
  * @DateTime 2017-09-18 15:14
  */
-function getAddressPC (provinces, cities) {
+function getAddressPC (provinces, cities, areas) {
   const r = {}
   const rC = _.cloneDeep(provinces)
 
@@ -41,11 +41,20 @@ function getAddressPC (provinces, cities) {
   const f = ['县', '省直辖县级行政区划', '自治区直辖县级行政区划']
 
   _.forEach(rC, p => {
+    let ac = []
     p.childs = _.map(
-      _.filter(_.cloneDeep(cities), c => p.code === c.parent_code && _.every(f, n => c.name !== n)),
+      _.filter(_.cloneDeep(cities), c => {
+        // 出于实用性考虑,将省或自治区直辖区县数据视为第二级(城市)数据
+        if (p.code === c.parent_code && ['省直辖县级行政区划', '自治区直辖县级行政区划'].includes(c.name)) {
+          ac = _.map(_.filter(_.cloneDeep(areas), a => c.code === a.parent_code), a => delete a.parent_code && a)
+        }
+        return p.code === c.parent_code && _.every(f, n => c.name !== n)
+      }),
       c => delete c.parent_code && c
     )
 
+    p.childs.push(...ac)
+
     // 四个直辖市(北京、天津、上海、重庆)仅有一个二级(城市)名为市辖区,
     // 出于实用性考虑,将二级(城市)重命名为第一级(省份)名称
     if (p.childs.length === 1 && p.childs[0].name === '市辖区') p.childs[0].name = p.name

+ 5 - 2
test/json.js

@@ -50,6 +50,9 @@ describe('中华人民共和国行政区划:', () => {
 
   it('“省份、城市” 二级联动数据', () => {
     assert.ok(pc['浙江省'].indexOf('杭州市') !== -1)
+    assert.ok(pc['河南省'].indexOf('济源市') !== -1)
+    assert.ok(pc['湖北省'].indexOf('仙桃市') !== -1)
+    assert.ok(pc['新疆维吾尔自治区'].indexOf('铁门关市') !== -1)
 
     for (const p in pc) {
       if (['台湾省', '香港特别行政区', '澳门特别行政区'].indexOf(p) === -1 &&
@@ -58,8 +61,8 @@ describe('中华人民共和国行政区划:', () => {
 
     let ok = false
     const t = [
-      { code: '13', name: '河北省' },
-      { code: '1303', name: '秦皇岛市' }
+      { code: '41', name: '河南省' },
+      { code: '419001', name: '济源市' }
     ]
     loop:
     for (let i = 0; i < pcC.length; i++) {

Some files were not shown because too many files changed in this diff