js把数组中相同属性的对象分成一组
时间: 2023-08-15 15:22:47 浏览: 52
你可以使用 JavaScript 中的 reduce() 方法和对象的属性来将数组中相同属性的对象分组。以下是一个示例代码:
```javascript
const arr = [
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 30 },
{ name: 'Charlie', age: 25 },
{ name: 'Dave', age: 35 }
];
const groups = arr.reduce((groups, item) => {
const group = (groups[item.age] || []);
group.push(item);
groups[item.age] = group;
return groups;
}, {});
console.log(groups);
```
在这个例子中,我们将一个包含不同年龄的人的数组分组。我们使用 reduce() 方法来遍历数组,并根据每个人的年龄将他们分组。在 reduce() 的回调函数中,我们检查是否已经有一个具有相同年龄的组,如果没有则创建一个新组。然后我们将当前对象添加到该组中,并将该组添加到 groups 对象中以便以后可以访问。最终,我们得到一个 groups 对象,其中属性名是每个组的年龄,属性值是包含该年龄的所有人对象的数组。
相关问题
js把数组相同属性的对象分组
如果你想将一个数组中相同属性的对象分组,可以使用JavaScript的reduce方法和对象的属性来实现。具体的方法如下:
假设你的原始数组长这样:
```javascript
var arr = [
{ name: 'Alice', age: 20 },
{ name: 'Bob', age: 25 },
{ name: 'Charlie', age: 20 },
{ name: 'David', age: 25 }
];
```
现在你想根据age属性将这个数组分组,可以使用reduce方法来实现:
```javascript
var groups = arr.reduce(function (result, current) {
if (!result[current.age]) {
result[current.age] = [];
}
result[current.age].push(current);
return result;
}, {});
```
这段代码将数组arr使用reduce方法进行遍历,每次遍历将当前元素的age属性作为key,将当前元素加入到对应的数组中。最后返回一个对象,对象的属性名为age的值,属性值为对应的数组。
这样,你就可以将原始数组根据age属性分成两组,分别是年龄为20岁和25岁的人。你可以使用console.log(groups)来查看结果:
```javascript
{
20: [
{ name: 'Alice', age: 20 },
{ name: 'Charlie', age: 20 }
],
25: [
{ name: 'Bob', age: 25 },
{ name: 'David', age: 25 }
]
}
```
这样,你就成功地将原始数组按照age属性分成了两组。
JS 数组对象中某个属性值相同归类成一个数组
可以使用 Array.prototype.reduce() 方法来实现这个功能。具体步骤如下:
1. 遍历数组,对于每个元素,获取需要归类的属性值。
2. 在 reduce() 方法中创建一个对象,用于保存归类后的结果。
3. 对于每个元素,检查对象中是否已经存在该属性值对应的数组,如果不存在,则创建一个新数组,并将该元素添加到数组中;如果已经存在,则将该元素添加到对应的数组中。
4. 最后,将对象中的值转换为数组,即可得到归类后的结果。
下面是一个示例代码:
```javascript
const arr = [
{ name: 'apple', type: 'fruit' },
{ name: 'banana', type: 'fruit' },
{ name: 'carrot', type: 'vegetable' },
{ name: 'orange', type: 'fruit' },
{ name: 'broccoli', type: 'vegetable' },
{ name: 'pear', type: 'fruit' },
{ name: 'tomato', type: 'vegetable' },
{ name: 'pepper', type: 'vegetable' },
{ name: 'grape', type: 'fruit' },
{ name: 'potato', type: 'vegetable' },
];
const result = arr.reduce((obj, item) => {
if (obj[item.type]) {
obj[item.type].push(item);
} else {
obj[item.type] = [item];
}
return obj;
}, {});
console.log(result);
```
输出结果为:
```javascript
{
fruit: [
{ name: 'apple', type: 'fruit' },
{ name: 'banana', type: 'fruit' },
{ name: 'orange', type: 'fruit' },
{ name: 'pear', type: 'fruit' },
{ name: 'grape', type: 'fruit' }
],
vegetable: [
{ name: 'carrot', type: 'vegetable' },
{ name: 'broccoli', type: 'vegetable' },
{ name: 'tomato', type: 'vegetable' },
{ name: 'pepper', type: 'vegetable' },
{ name: 'potato', type: 'vegetable' }
]
}
```
在这个示例中,我们将 `arr` 数组中的元素按照 `type` 属性进行归类,得到一个包含 `fruit` 和 `vegetable` 两个属性的对象。每个属性对应一个数组,包含相同 `type` 属性值的元素。