”数组对象“转换为"多位数组+对象的组合"

如何将数组对象转换为

var city = [{ "name":"南昌","p":"N"},{ "name":"四川","p":"S"},{ "name":"北京","p":"B"}]

以下格式对象

var city = [
 {
    title:"A",
    item: [
      {
        "name": "阿坝",
        "key": "A"
      },
      {
        "name": "阿拉善",
        "key": "A"
      },
      {
        "name": "阿里",
        "key": "A"
      },
      {
        "name": "安康",
        "key": "A"
      },
      {
        "name": "安庆",
        "key": "A"
      },

      {
        "name": "鞍山",
        "key": "A"
      }
      ,
      {
        "name": "安顺",
        "key": "A"
      }
      ,
      {
        "name": "安阳",
        "key": "A"
      }
      ,
      {
        "name": "澳门",
        "key": "A"
      }
    ]
  }, {
    title: "B",
    item: [
      {
        "name": "北京",
        "key": "B"
      },
      {
        "name": "白银",
        "key": "B"
      },
      {
        "name": "保定",
        "key": "B"
      },
      {
        "name": "宝鸡",
        "key": "B"
      },
      {
        "name": "保山",
        "key": "B"
      },
      {
        "name": "包头",
        "key": "B"
      },
      {
        "name": "巴中",
        "key": "B"
      }
      ,
      {
        "name": "北海",
        "key": "B"
      }
      ,
      {
        "name": "蚌埠",
        "key": "B"
      }
      ,
      {
        "name": "本溪",
        "key": "B"
      }
      ,
      {
        "name": "毕节",
        "key": "B"
      }
      ,
      {
        "name": "滨州",
        "key": "B"
      }
      ,
      {
        "name": "百色",
        "key": "B"
      }
      ,
      {
        "name": "亳州",
        "key": "B"
      }
    ]
  }, {
    title: "C",
    item: [
      {
        "name": "重庆",
        "key": "C"
      },
      {
        "name": "成都",
        "key": "C"
      },
    ]
  },

问题描述

问题出现的环境背景及自己尝试过哪些方法

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

你期待的结果是什么?实际看到的错误信息又是什么?

阅读 1.8k
2 个回答

更新于:2019年7月6日16:18:26。遍历,根据title去push到对应的数组咯。快的方法是做hash

city.map((v)=>v.item.map(v=>({name:v.name,p:v.key}))).flat()
.reduce((s,v)=>{
    var item = s.find(item=>item.title == v.p);
    if(item){
       item.item.push(v)
    }else{
       s.push({title: v.p,item:[v]})
    }
    return s
}, [])

city.map((v)=>v.item.map(v=>({name:v.name,p:v.key}))).flat()

clipboard.png

  1. 首先得到指定格式的所有城市的一个嵌套数组:

    const nestedCityList = city.map(c => c.item.map(i => ({ name: i.name, p: i.key })))
  2. 递归遍历 nestedCityList 合并元素即可,也就是扁平化,方法有很多,比如
  • concat

    const result = [].concat(...nestedCityList)
  • reduce + concat 反嵌套一层数组

    const result = nestedCityList.reduce((acc, cur) => acc.concat(cur), [])
  • Array.proptype.flat

    const result = nestedCityList.flat()
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏