js 数组二维数组的处理?

let A = [
  {province: '广东省', city: '深圳市'},
  {province: '湖南省', city: '长沙市'},
  {province: '浙江省', city: '宁波市'},
  {province: '广东省', city: '广州市'},
  {province: '广东省', city: '佛山市'},
  {province: '湖南省', city: '湘潭市'},
  {province: '湖南省', city: '株洲市'},
  {province: '广东省', city: '东莞市'}
]

需要得到,麻烦各位大佬帮看看,谢谢了

let B = [    
    {
        province: '广东省',
        childList: [
            {province: '广东省', city: '深圳市'},
            {province: '广东省', city: '广州市'},
            {province: '广东省', city: '佛山市'},
            {province: '广东省', city: '东莞市'}
        ]
    },
    {
        province: '湖南省',
        childList: [
            {province: '湖南省', city: '长沙市'},
            {province: '湖南省', city: '湘潭市'},
            {province: '湖南省', city: '株洲市'}
        ]
    },
    {
        province: '浙江省',
        childList: [
            {province: '浙江省', city: '宁波市'}
        ]
    },
]
阅读 1.7k
4 个回答

forEach 更简单直接 :

const B = []
A.forEach(item => {
  const p = B.find(c => c.province === item.province)
  if (!p) {
    B.push({
      province: item.province,
      childList: [item],
    }) 
  } else {
    p.childList.push(item)
  } 
})
A.reduce((acc, item) => {
    const finder = acc.find(subItem => subItem.province === item.province)
    if (!finder) {
        acc.push({
            province: item.province,
            childList: [item]
        })
    } else {
        finder.childList.push(item)
    }
    return acc;
}, [])
let A = [
    {province: '广东省', city: '深圳市'},
    {province: '湖南省', city: '长沙市'},
    {province: '浙江省', city: '宁波市'},
    {province: '广东省', city: '广州市'},
    {province: '广东省', city: '佛山市'},
    {province: '湖南省', city: '湘潭市'},
    {province: '湖南省', city: '株洲市'},
    {province: '广东省', city: '东莞市'}
  ]

const b = A.reduce((pre,cur)=>{
    if(pre[cur.province]){
        pre[cur.province].push(cur.city)
    }else{
        pre[cur.province] = []
    } 
    return pre
},{})
const B = []
for(let province in b){
    B.push({
        province,
        childList: b[province].map(i=>({
            province,
            city: i
        }))
    })
}
console.log(B)

分组

Object.entries(A.reduce((o, v) => ((o[v.province] ??= []).push(v), o), {}))
  .map(([province, childList]) => ({ province, childList }))
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题