将一个数组中,某个字段相同的对象取出,组成一个新的数组
时间: 2024-02-03 15:13:04 浏览: 248
JavaScript对象数组如何按指定属性和排序方向进行排序
假设我们有一个包含多个对象的数组 `arr`,每个对象都有一个字段 `field`,我们要将这个数组中所有 `field` 相等的对象取出,组成一个新的数组 `newArr`。可以采用如下代码实现:
```javascript
const arr = [
{ id: 1, field: 'foo', value: 123 },
{ id: 2, field: 'bar', value: 456 },
{ id: 3, field: 'foo', value: 789 },
{ id: 4, field: 'baz', value: 101112 },
{ id: 5, field: 'bar', value: 131415 }
];
const groupByField = (arr, field) => {
return arr.reduce((acc, cur) => {
const index = acc.findIndex(obj => obj[field] === cur[field]);
if (index === -1) {
acc.push({ [field]: cur[field], items: [cur] });
} else {
acc[index].items.push(cur);
}
return acc;
}, []).map(group => group.items);
};
const newArr = groupByField(arr, 'field');
console.log(newArr);
```
上述代码中,我们定义了一个 `groupByField` 函数,它接收两个参数,分别是原始数组 `arr` 和用于分组的字段名 `field`。在函数内部,我们使用 `Array.prototype.reduce()` 方法对原始数组进行遍历,对于每个元素,我们都在累加器 `acc` 中查找是否已经存在与当前元素相同的分组,如果未找到,则创建一个新的分组对象,并将当前元素添加到该分组的 `items` 属性中;否则,将当前元素添加到找到的分组的 `items` 属性中。最终,我们使用 `Array.prototype.map()` 方法将每个分组对象的 `items` 属性提取出来,组成新的数组 `newArr`。
阅读全文