首頁  >  問答  >  主體

javascript - 資料格式轉化,求救

    110000:['北京市', 1],
    110100:['北京市', 110000],
    110101:['东城区', 110100],
    110102:['西城区', 110100],
    110105:['朝阳区', 110100],
    110106:['丰台区', 110100],
    110107:['石景山区', 110100],
    110108:['海淀区', 110100],
    110109:['门头沟区', 110100],
    110111:['房山区', 110100],
    110112:['通州区', 110100],
    110113:['顺义区', 110100],
    110114:['昌平区', 110100],
    110115:['大兴区', 110100],
    110116:['怀柔区', 110100],
    110117:['平谷区', 110100],
    110199:['其它区', 110100],
    110200:['县', 110000],
    110228:['密云县', 110200],
    110229:['延庆县', 110200],

如何轉化為:

"86": {
    "110000": "北京市",
    "120000": "天津市",
    "130000": "河北省",
    "140000": "山西省",
    "150000": "内蒙古自治区",
    "210000": "辽宁省",
    "220000": "吉林省",
    "230000": "黑龙江省",
    "310000": "上海市",
    "320000": "江苏省",
    "330000": "浙江省",
    "340000": "安徽省",
    "350000": "福建省",
    "360000": "江西省",
    "370000": "山东省",
    "410000": "河南省",
    "420000": "湖北省",
    "430000": "湖南省",
    "440000": "广东省",
    "450000": "广西壮族自治区",
    "460000": "海南省",
    "500000": "重庆市",
    "510000": "四川省",
    "520000": "贵州省",
    "530000": "云南省",
    "540000": "西藏自治区",
    "610000": "陕西省",
    "620000": "甘肃省",
    "630000": "青海省",
    "640000": "宁夏回族自治区",
    "650000": "新疆维吾尔自治区",
    "710000": "台湾省",
    "810000": "香港特别行政区",
    "820000": "澳门特别行政区"
  },
  "110000": {
    "110100": "市辖区"
  },
  "110100": {
    "110101": "东城区",
    "110102": "西城区",
    "110105": "朝阳区",
    "110106": "丰台区",
    "110107": "石景山区",
    "110108": "海淀区",
    "110109": "门头沟区",
    "110111": "房山区",
    "110112": "通州区",
    "110113": "顺义区",
    "110114": "昌平区",
    "110115": "大兴区",
    "110116": "怀柔区",
    "110117": "平谷区",
    "110228": "密云县",
    "110229": "延庆县"
  }

這種格式呢?能力有限,實在想不出來,這種能實現轉化嗎?

伊谢尔伦伊谢尔伦2708 天前882

全部回覆(3)我來回復

  • 扔个三星炸死你

    扔个三星炸死你2017-06-12 09:31:38

    手機回答,沒辦法給你上代碼,但是大概思路應該是:
    1.先理一下你的需求,如果我理解錯了,下面的就不用看了:
    你是想把原來的一維的,沒有層級結構的數據按照國家代號,省市代號,地區代號這樣分開,下一級地區的key是上一級省市的key,通過代碼可以直接從國家到省到市,一級一級的找到某地區。
    2.首先,你的資料是一個對象,每個屬性是對應值的地區代號,而值是一個數組,第二個元素是他的父節點代號,這就好辦了。
    3.先建立一個空物件。
    4.循環遍歷原對象。
    5.每拿到一個原對象的屬性,先判斷他的值(也就是二值數組)的第二個值,如果是1,說明是頂級地區,也就是省或者直轄市,把這些寫到新建立物件中,寫在86國家代碼那個屬性下,
    6.如果拿到的第二個值不是1,說明他不是頂級的省或者市,而是某個地區,去新對像下去找有沒有該程式碼對應的省或地區,如果沒有,就在新物件中新建,有則直接寫到對應程式碼中。
    7.這樣就可以按照國家~省/直轄市~地區,的方式劃分開
    8.看到你還特意標明了,直轄市,根據你給的數據,如果省名稱和直轄市名稱一樣的話,就表明成直轄市就行了

    9.手機打,會有很多不好理解的地方,如果方法不能理解或有錯,請直接忽視

    回覆
    0
  • ringa_lee

    ringa_lee2017-06-12 09:31:38

    一個簡單的範例如下(來源資料格式非 JSON,故簡單實作中強行 eval 之):

    const src = `
      110000: ['北京市', 1],
      110100: ['北京市', 110000],
      110101: ['东城区', 110100],
      110102: ['西城区', 110100],
      110105: ['朝阳区', 110100],
      110106: ['丰台区', 110100],
      110107: ['石景山区', 110100],
      110108: ['海淀区', 110100],
      110109: ['门头沟区', 110100],
      110111: ['房山区', 110100],
      110112: ['通州区', 110100],
      110113: ['顺义区', 110100],
      110114: ['昌平区', 110100],
      110115: ['大兴区', 110100],
      110116: ['怀柔区', 110100],
      110117: ['平谷区', 110100],
      110199: ['其它区', 110100],
      110200: ['县', 110000],
      110228: ['密云县', 110200],
      110229: ['延庆县', 110200]
    `
    
    function convert (src) {
      // hack 将结构字符串 eval 转为对象
      const tmpObj = eval('(function () { return {' + src + '} })()')
    
      // 输出目标格式,硬编码一条简单数据
      const result = { 86: {}, 110000: { 110100: '市辖区' }, 110100: {} }
      // [110000, 110100...]
      const tmpArr = Object.keys(tmpObj)
      tmpArr.forEach(key => {
        result[86][key] = tmpObj[key][0]
      })
      tmpArr.forEach(key => {
        if (tmpObj[key][1] === 110100) {
          result[110100][key] = tmpObj[key][0]
        }
      })
      return result
    }
    
    console.log(convert(src))

    執行結果:

    ➜  Desktop node demo
    { '86': 
       { '110000': '北京市',
         '110100': '北京市',
         '110101': '东城区',
         '110102': '西城区',
         '110105': '朝阳区',
         '110106': '丰台区',
         '110107': '石景山区',
         '110108': '海淀区',
         '110109': '门头沟区',
         '110111': '房山区',
         '110112': '通州区',
         '110113': '顺义区',
         '110114': '昌平区',
         '110115': '大兴区',
         '110116': '怀柔区',
         '110117': '平谷区',
         '110199': '其它区',
         '110200': '县',
         '110228': '密云县',
         '110229': '延庆县' },
      '110000': { '110100': '市辖区' },
      '110100': 
       { '110101': '东城区',
         '110102': '西城区',
         '110105': '朝阳区',
         '110106': '丰台区',
         '110107': '石景山区',
         '110108': '海淀区',
         '110109': '门头沟区',
         '110111': '房山区',
         '110112': '通州区',
         '110113': '顺义区',
         '110114': '昌平区',
         '110115': '大兴区',
         '110116': '怀柔区',
         '110117': '平谷区',
         '110199': '其它区' } }

    回覆
    0
  • 淡淡烟草味

    淡淡烟草味2017-06-12 09:31:38

    https://windqyoung.github.io/...

    隨意轉換.

    回覆
    0
  • 取消回覆