现在有如下数组,我要把数组的格式改变成如下格式,如何实现呢?

   const arr = [//长度为8
                    {id:1,name:"小明",age:18,dreid:50},
                    {id:2,name:"大热",age:18,dreid:52},
                    {id:4,name:"妇女会计",age:18,dreid:51},
                    {id:3,name:"千万",age:18,dreid:53},
                    {id:1,name:"小强",age:18,dreid:51},
                    {id:3,name:"千的",age:18,dreid:50},
                    {id:2,name:"大巴",age:18,dreid:53},
                    {id:4,name:"妇女放假",age:18,dreid:52},
                ]
我要把id相等的放在一个数组(我举例子id和dreid是连续的,实际传递回来的不是连续的),dreid相等的放在一个数组 变为这样的,数组的长度是不同id的长度
     let arr = [{//数组长度为4,每个不用id的个数
                        dreid: 50,//dreid相等的都放在listDreid数组中
                        listDreid: [
                            {id: 1,name: "小明",age: 18,dreid: 50},
                            {id: 3,name: "千的",age: 18,dreid: 50},
                        ],
                        id: 1,//id相等的放在listId数组中
                        listId: [
                          {id: 1,name: "小明",age: 18,dreid: 50},
                          {id: 1,name: "小强",age: 18,dreid: 51},
                        ]
                    },
                    {
                        dreid: 51,//dreid相等的都放在listDreid数组中
                        listDreid: [
                            {id: 4,name: "妇女会计",age: 18,dreid: 51},
                            {id: 1,name: "小强",age: 18,dreid: 51},
                        ],
                        id: 2,//id相等的放在listId数组中
                        listId: [
                            {id:2,name:"大热",age:18,dreid:52},
                            {id:2,name:"大巴",age:18,dreid:53},
                        ]
                    },
                    {
                        dreid: 52,//dreid相等的都放在listDreid数组中
                        listDreid: [
                            {id: 2,name: "大热",age: 18,dreid: 52},
                            {id: 4,name: "妇女放假",age: 18,dreid: 52}
                        ],
                        id: 3,//id相等的放在listId数组中
                        listId: [
                            {id:3,name:"千万",age:18,dreid:53},
                            {id:3,name:"千的",age:18,dreid:50},
                        ]
                    },
                    {
                        dreid: 53,//dreid相等的都放在listDreid数组中
                        listDreid: [
                            {id: 3,name: "千万",age: 18,dreid: 53},
                            {d: 2,name: "大巴",age: 18,dreid: 53}
                        ],
                        id: 4,//id相等的放在listId数组中
                        listId: [
                            {id:4,name:"妇女会计",age:18,dreid:51},
                            {id:4,name:"妇女放假",age:18,dreid:52},
                        ]
                    }];

这个怎么实现呢? 在线等 !!

阅读 1.5k
2 个回答

太low了,有好的方案在分享下

function mergeArr(arr){
    sortArr(arr,'dreid')
    return aa(arr)
}

function sortArr(arr,type){
    return arr.sort((val1,val2)=>{
        return val1[type] - val2[type]
    })
}

function aa(arr){
    let obj = {};
    let result = [];
    arr.forEach((item,index)=>{
        if(!obj[item.dreid]){
            sortArr(arr,'id')
            let idFilter = arr.filter(v=>{
                return v.id == (index+1)
            })
            result.push({
                dreid:item.dreid,
                listDreid:[item],
                id:index+1,
                listId:idFilter
            })
            obj[item.dreid]=item
        }else{
            result.forEach(val=>{
                if(val.dreid == item.dreid){
                    val.listDreid.push(item)
                }
            })
        }
    })
    return result
}
console.log(mergeArr(arr))

定义数组对象然后和你返回的数据循环做判断 如果包含就添加一条到listDreid中 没有就就添加一个对象

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