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

        const arr = [
                    {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相等的放在一个数组,dreid相等的放在一个数组 变为这样的,数组的长度是不同id的长度
                let arr = [{
                        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.6k
2 个回答
function transform(arr) {
    var ret = [];
    if (Array.isArray(arr) && arr.length) {
        loop: for (var i = 0; i < arr.length; i++) {
            var a = arr[i];
            var id = a.id;
            var dreid = a.dreid;
            var isFound = 0;
            for (var j = 0; j < ret.length; j++) {
                var b = ret[j];
                if (b.id === id) {
                    b.listId.push(a);
                    isFound++;
                } else if (b.dreid === dreid) {
                    b.listDreid.push(a);
                    isFound++
                }
            }
            if (!isFound) ret.push({
                id: id,
                listId: [a],
                dreid: dreid,
                listDreid: [a]
            });
        }
    }
    return ret;
}
console.log(transform(arr));
let res = []
arr.forEach((item, index) => {
    let id = item['id'];
    let dreid = item['dreid'];
    let listId = []
    let listDreid = []
    arr.forEach((item1) => {
        if (item1['id'] == index + 1) {
            listId.push(item1)
        }
        if (dreid == item1['dreid']) {
            listDreid.push(item1)
        }
    })
    res.push({
        dreid: dreid,
        listDreid: listDreid,
        id: id,
        listId: listId
    })
})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题