如何把array重组

有一个array是这样子

[
  {
     id:1,
     info: {name:"abc"}
     show: true
  },
 {
     id:2,
     info: {name:"abc"}
     show: true
  },
 {
     id:3,
     info: {name:"qq"}
     show: true
  }
 ]

然后我希望重组array 把一样的info.name放在同一个object里,变成下面这样,这有办法办到吗?

[
    
      {
        {
          id:1,
          info: {name:"abc"}
          show: true
       },
        {
          id:2,
          info: {name:"abc"}
          show: true
       },
      },
      
    
     {
         id:3,
         info: {name:"qq"}
         show: true
      }
     ]

阅读 2.1k
2 个回答

Object 里面的结构要是键值对的结构的.
如果要分类的话,你可以试试看下面几种格式

第一种格式

[
  {
    "info": {
      "name": "abc"
    },
    "data": [
      {
        "id": 1,
        "info": {
          "name": "abc"
        },
        "show": true
      },
      {
        "id": 2,
        "info": {
          "name": "abc"
        },
        "show": true
      }
    ]
  },
  {
    "info": {
      "name": "qq"
    },
    "data": [
      {
        "id": 3,
        "info": {
          "name": "qq"
        },
        "show": true
      }
    ]
  }
]

转换代码

var newArr = arr.reduce((newArr, next) => {
  var item = newArr.find(a => a.info.name === next.info.name)
  if (item) {
    item.data.push(next)
  } else {
    newArr.push({ info: { name: next.info.name }, data: [next] })
  }
  return newArr
}, [])

第二种格式

{
  "abc": {
    "data": [
      {
        "id": 1,
        "info": {
          "name": "abc"
        },
        "show": true
      },
      {
        "id": 2,
        "info": {
          "name": "abc"
        },
        "show": true
      }
    ]
  },
  "qq": {
    "data": [
      {
        "id": 3,
        "info": {
          "name": "qq"
        },
        "show": true
      }
    ]
  }
}

转换代码

var obj = arr.reduce((obj, next) => {
  const {
    info: { name },
  } = next
  var item = obj[name]
  if (item) {
    item.data.push(next)
  } else {
    obj[name] = { data: [next] }
  }
  return obj
}, {})

第三种格式

[
  [
    {
      "id": 1,
      "info": {
        "name": "abc"
      },
      "show": true
    },
    {
      "id": 2,
      "info": {
        "name": "abc"
      },
      "show": true
    }
  ],
  [
    {
      "id": 3,
      "info": {
        "name": "qq"
      },
      "show": true
    }
  ]
]

转换代码

// 第二种格式的基础上,加上下面的代码
var newArr=Object.keys(obj).map(key=>obj[key].data)
其实就是原生函数的简单应用,建议还是把基础学学好,就可以根据需要把数据转换成自己想要的格式了.

重组后数据本身就有问题啊

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题