您好,匿名用户

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

0 投票
   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},
                        ]
                    }];

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

用户头像 提问 2019年 5月24日 @ Rider 中士 (1,266 威望)
分享到:

1个回答

0 投票
 
最佳答案

太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))
用户头像 回复 2019年 5月24日 @ Malphite 中士 (1,401 威望)
选中 2019年 5月12日 @Rider
提一个问题:

相关问题

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

IT技术交流群 - 随意问
欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...