JS数组递归遍历有个问题,求解答

[
  {
    "id": 35,
    "code": "110100",
    "name": "北京市",
    "type": 1,
    "regions": [
      {
        "id": 373,
        "code": "110101",
        "name": "东城区",
        "type": 2,
        "regions": [],
        "latitude": 0,
        "longitude": 0
      },
      {
        "id": 373,
        "code": "110101",
        "name": "西城区",
        "type": 2,
        "regions": [],
        "latitude": 0,
        "longitude": 0
      }],
    "latitude": 0,
    "longitude": 0
  },
  {
    "id": 36,
    "code": "120100",
    "name": "天津市",
    "type": 1,
    "regions": [
      {
        "id": 389,
        "code": "120101",
        "name": "和平区",
        "type": 2,
        "regions": [],
        "latitude": 0,
        "longitude": 0
      }],
    "latitude": 0,
    "longitude": 0
  },
  {
    "id": 37,
    "code": "130100",
    "name": "石家庄市",
    "type": 1,
    "regions": [
      {
        "id": 405,
        "code": "130102",
        "name": "长安区",
        "type": 2,
        "regions": [],
        "latitude": 0,
        "longitude": 0
      }],
    "latitude": 0,
    "longitude": 0
  }]

有一个这样的数组,我不知道怎么递归遍历返回出成为这样的数组形式

[{
    text:'北京市',
    value:'北京市',
    children:[
        {
            text:'东城区',
            value:'东城区'
        }
    ]
},{
    text:'北京市',
    value:'北京市',
    children:[
        {
            text:'东城区',
            value:'东城区'
        },
        {
          text:'西城区',
          value:'西城区'
        }
    ]
}]

请问一下怎么写这个递归的函数

阅读 3.5k
4 个回答
function fnArr(a){
        return a.length ? a.map(function(o){
            var oNew = {
                text : o.name,
                value : o.name,
                children : fnArr(o.regions) 
            };
            if (oNew.children === undefined) delete oNew.children;
            return oNew;
        }) : undefined;
     }
     

console.log(fnArr([
  {
    "id": 35,
    "code": "110100",
    "name": "北京市",
    "type": 1,
    "regions": [
      {
        "id": 373,
        "code": "110101",
        "name": "东城区",
        "type": 2,
        "regions": [],
        "latitude": 0,
        "longitude": 0
      }],
    "latitude": 0,
    "longitude": 0
  },
  {
    "id": 36,
    "code": "120100",
    "name": "天津市",
    "type": 1,
    "regions": [
      {
        "id": 389,
        "code": "120101",
        "name": "和平区",
        "type": 2,
        "regions": [],
        "latitude": 0,
        "longitude": 0
      }],
    "latitude": 0,
    "longitude": 0
  },
  {
    "id": 37,
    "code": "130100",
    "name": "石家庄市",
    "type": 1,
    "regions": [
      {
        "id": 405,
        "code": "130102",
        "name": "长安区",
        "type": 2,
        "regions": [],
        "latitude": 0,
        "longitude": 0
      }],
    "latitude": 0,
    "longitude": 0
  }]));
function trans(arr){
    return arr.map((item)=>{
        if(item["regions"]&&Array.isArray(item["regions"])){
            return {text: item["name"],value: item["name"], children: trans(item["regions"])}
        }
    })
}

把你的数组搞进去看看,骚年

var arr = [{
                    "id": 35,
                    "code": "110100",
                    "name": "北京市",
                    "type": 1,
                    "regions": [{
                        "id": 373,
                        "code": "110101",
                        "name": "东城区",
                        "type": 2,
                        "regions": [],
                        "latitude": 0,
                        "longitude": 0
                    }],
                    "latitude": 0,
                    "longitude": 0
                },
                {
                    "id": 36,
                    "code": "120100",
                    "name": "天津市",
                    "type": 1,
                    "regions": [{
                        "id": 389,
                        "code": "120101",
                        "name": "和平区",
                        "type": 2,
                        "regions": [],
                        "latitude": 0,
                        "longitude": 0
                    }],
                    "latitude": 0,
                    "longitude": 0
                },
                {
                    "id": 37,
                    "code": "130100",
                    "name": "石家庄市",
                    "type": 1,
                    "regions": [{
                        "id": 405,
                        "code": "130102",
                        "name": "长安区",
                        "type": 2,
                        "regions": [],
                        "latitude": 0,
                        "longitude": 0
                    }],
                    "latitude": 0,
                    "longitude": 0
                }
            ];

            function abc(arr) {
                var arr1 = [];
                for(var i = 0, l = arr.length; i < l; i++) {
                    arr1[i] = {
                        text: arr[i].name,
                        value: arr[i].name,
                        children: [{
                            text: arr[i].regions[0].name,
                            value: arr[i].regions[0].name
                        }]
                    }
                }
                return arr1;
            }
            
            var a = abc(arr);
            console.log(a)

var newarr = new Array();

    var obj = new Object();
    for(var i=0;i<arr.length;i++){
        obj.text = arr[i].name;
        obj.value = arr[i].name;
        obj.childern = new Object();
        obj.childern.text = arr[i].regions[0].name;
        obj.childern.value = arr[i].regions[0].name;
        newarr.push(obj);
    }
    console.log(newarr);
    我这样写 是哪里出了问题 谁能点我一下
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题