如何封装一个函数让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));