javascript - 我有一个省市区的json数据,现在需要用递归的方式去获取属性值(看题)
阿神
阿神 2017-04-11 11:49:25
[JavaScript讨论组]

数据结构:

    {
        "province" : [{
                "id" : 110000,
                "name" : "北京"
            }, {
                "id" : 120000,
                "name" : "天津"
            }, {
                "id" : 130000,
                "name" : "河北"
            }
        ],
        "city" : {
            "110000" : [{
                    "id" : 110100,
                    "name" : "北京市"
                }
            ],
            "120000" : [{
                    "id" : 120100,
                    "name" : "天津市"
                }
            ],
            "130000" : [{
                    "id" : 130100,
                    "name" : "石家庄市"
                }, {
                    "id" : 130200,
                    "name" : "唐山市"
                }, {
                    "id" : 130300,
                    "name" : "秦皇岛市"
                }, {
                    "id" : 130400,
                    "name" : "邯郸市"
                }, {
                    "id" : 130500,
                    "name" : "邢台市"
                }, {
                    "id" : 130600,
                    "name" : "保定市"
                }, {
                    "id" : 130700,
                    "name" : "张家口市"
                }, {
                    "id" : 130800,
                    "name" : "承德市"
                }, {
                    "id" : 130900,
                    "name" : "沧州市"
                }, {
                    "id" : 131000,
                    "name" : "廊坊市"
                }, {
                    "id" : 131100,
                    "name" : "衡水市"
                }
            ]
            }
    }

这是js代码:

        /**
    p_uid:省份号
    c_uid:城市号
    a_uid:区县号
    
    数据源对应的key释义:
    province:省份
    city:城市
    district:区/县
    */
    
    
    
    
    var p_uid = 0;
    var c_uid = 0;
    var a_uid = 0;
    $(function(){
    
    function placePushName(p_uid,c_uid,a_uid){
    
        $.ajax({
            type:"get",
            url : "../../json/allcity.json",
            dataType : "json",
            success : function(json){
                // console.info(json["city"]);
                var city_data;
                var data1 = json["province"];
                var data2 = json["city"];
                // var data3 = json["district"];
                var Puid,Cuid,Auid;
                var province_code;
                    for(var i = 0 ; i < data1.length; i++){
                        province_code = data1[i]["id"];
                        if(province_code == p_uid){
                            console.info(data1[i]["name"]);
                            console.info(data1[i]["id"]);
                            // Puid = data1[i]["id"];
                            city_data = data1[i]["id"];
                            for(var j = 0; j < data2.length; j++){
                                // data2[i][""+c_uid] == ;c
                                console.info(data2[j]);
                                // if(data2[i]["id"] == c_uid){
                                //     console.info(data2[i]["name"]);
                                // }
    
                                }
                        }
                    }
                
                // for(var i = 0; i < data3.length; i++){
                //     Auid = data3[i]["id"];
                //     if(Auid == Cuid){
    
                //     }
                // }
            }
        });
    }
        placePushName(110000,110100,110100);
    });
    

定义placePushName方法为了通过省市区这3个id值找到对应的name值
-现在希望就是用递归的方式来解决这个问题?请问大家有思路吗

阿神
阿神

闭关修行中......

全部回复(2)
阿神

按照我的理解给你写一个,我猜你的数据格式应该是这个样子的:

var json = {
  province:[ {id, name} ],
  city: { provinceId: [ {id, name} ] },
  district: { cityId: [ {id, name} ] }
}

其实不需要递归这么高级的东西,反而麻烦。。。直接遍历就好

function getName(target, id) {
  if(!target || target.length == 0) return "";
  for(let ele in target) {
    if(ele.id == id) {
      return ele.name;
    }
  }
}

function generateName(p_uid, c_uid, a_uid) {
  var pName = getName(json.province, p_uid),
      cName = getName(json.city[p_uid], c_uid),
      aName = getName(json.district[c_uid], a_uid);

}
黄舟

数据结构统一成id: name

{
    "province" : {
        "110000": "北京",
     },
    "city" : {
        "110100": "北京市"
    }
}

问题就简化成了根据id获取name

如果改不了数据结构,那就按上面的数据结构建个自己的对象

function(json){
    var data = {};
    var data1 = json["province"];
    
    data.province = {}
    data1.forEach(function(item, index){
        data.province[item.id] = item.name
    })
}

问题就简化成了根据id获取name

如果还需要“省份-城市-县城”三个name,那就把XXXXXX拆分出XX0000、XXXX00、XXXXXX,再用上面的数据结构直接获取

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号