js面试题,如何封装一个函数让arr输出下面的结果

如何封装一个函数让arr输出下面的结果

let arr=[
{id:1},
{id:1},
{id:2},
{id:3},
{id:3},
{id:4},
{id:5},
{id:5}
]

 输出arr = [
 [{id:1},{id:1}],
 [{id:2}],
 [{id:3},{id:3}],
 [{id:4}],
 [{id:5},{id:5}]
]
*/
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        let arr1 = [
            { id: 1 },
            { id: 1 },
            { id: 2 },
            { id: 3 },
            { id: 3 },
            { id: 4 },
            { id: 5 },
            { id: 5 }
        ]
        let arr2 = [
            [{ id: 1 }, { id: 1 }],
            [{ id: 2 }],
            [{ id: 3 }, { id: 3 }],
            [{ id: 4 }],
            [{ id: 5 }, { id: 5 }]
        ]
        function format(arr) {
            let res = {}
            for (let i = 0; i < arr.length; i++) {
                if (!res[arr[i].id]) res[arr[i].id] = []
                res[arr[i].id].push(arr[i]);
            }
            return Object.values(res)
        }
        console.log(format(arr1));
        console.log(JSON.stringify(format(arr1)) == JSON.stringify(arr2));
    </script>
</body>
</html>

const f = (arr) => {
  return Object.values(arr.reduce((a,b) => {
    if(a[b.id]) {
      a[b.id].push(b)
    }else{
      a[b.id] = [b]
    }
    return a
  },{}))
}
console.log(f(arr))

let arr=[];
arr.push([{id:1},{id:1}]);
arr.push([{id:2}]);
arr.push([{id:3},{id:3}]);
arr.push([{id:4}]);
arr.push( [{id:5},{id:5}]);
console.log("arr ="+JSON.stringify(arr));

如果是上面的,则:
let arr=[];
arr.push({id:1});
arr.push({id:2});
arr.push({id:3});
arr.push({id:4});
arr.push({id:5});
arr.push({id:6});
console.log("arr ="+JSON.stringify(arr));