使用js实现一个函数,需求是给定一个对象数组,根据对象的某个字段对这些对象进行分组,分组内容塞到children里面返回,返回格式也是一个对象数组,对象有一个字段为children
时间: 2024-02-27 15:56:51 浏览: 60
js代码-数组对象根据某个值相同合并分组
好的,我理解您的意思了。基于您的需求,我写了以下的 JavaScript 函数来实现:
```javascript
function groupBy(arr, field) {
const groups = {};
arr.forEach(item => {
const groupValue = item[field];
if (!groups[groupValue]) {
groups[groupValue] = {
[field]: groupValue,
children: []
};
}
groups[groupValue].children.push(item);
});
return Object.values(groups);
}
```
这个函数接受两个参数:一个对象数组 `arr`,和一个字符串 `field`,表示按照哪个字段进行分组。函数内部使用了一个对象 `groups` 来存储分组结果,然后遍历对象数组,对每个对象进行分组,并将分组结果存储到 `groups` 对象中。最后,我们将 `groups` 对象中的值转换成数组形式,并返回即可。
例如,如果我们有以下的对象数组:
```javascript
const arr = [
{ name: 'Alice', age: 23, gender: 'female' },
{ name: 'Bob', age: 25, gender: 'male' },
{ name: 'Charlie', age: 22, gender: 'male' },
{ name: 'David', age: 24, gender: 'male' },
{ name: 'Eve', age: 21, gender: 'female' },
{ name: 'Frank', age: 26, gender: 'male' },
{ name: 'Grace', age: 20, gender: 'female' },
{ name: 'Henry', age: 27, gender: 'male' },
];
```
我们可以使用 `groupBy` 函数按照 `gender` 字段进行分组:
```javascript
const result = groupBy(arr, 'gender');
console.log(result);
```
这个函数会返回以下结果:
```javascript
[
{
gender: 'female',
children: [
{ name: 'Alice', age: 23, gender: 'female' },
{ name: 'Eve', age: 21, gender: 'female' },
{ name: 'Grace', age: 20, gender: 'female' }
]
},
{
gender: 'male',
children: [
{ name: 'Bob', age: 25, gender: 'male' },
{ name: 'Charlie', age: 22, gender: 'male' },
{ name: 'David', age: 24, gender: 'male' },
{ name: 'Frank', age: 26, gender: 'male' },
{ name: 'Henry', age: 27, gender: 'male' }
]
}
]
```
在这个结果中,我们可以看到,原始的对象数组已经被按照 `gender` 字段分成了两组,并且每组的结果都被塞到了 `children` 字段中。
阅读全文