使用 filter 找到具有相同 id 的对象并拆成两个数组
时间: 2024-12-28 07:31:28 浏览: 2
在JavaScript中,`filter()` 方法主要用于从数组中筛选出满足特定条件的元素,创建一个新的数组。如果你想找到具有相同id的对象并将它们分组到两个数组中,可以按照以下步骤操作:
首先,假设你有一个包含对象的数组,每个对象都有一个名为 `id` 的属性。你可以使用 `filter()` 和 `reduce()` 方法配合来完成这个任务:
```javascript
let arr = [
{ id: '1', name: 'Alice' },
{ id: '2', name: 'Bob' },
{ id: '1', name: 'Charlie' },
{ id: '3', name: 'Dave' }
];
// 使用filter找到具有相同id的对象
let duplicates = arr.filter((obj, index, self) => {
return self.findIndex(other => other.id === obj.id && other !== obj) !== -1;
});
// 创建新数组,一个数组存储单个id的所有对象,另一个数组存储重复的id对象
let uniqueById = arr.reduce((acc, obj) => {
if (!acc[obj.id]) acc[obj.id] = [];
acc[obj.id].push(obj);
return acc;
}, {});
let sameIdGroups = [Object.keys(uniqueById).map(id => uniqueById[id]), duplicates];
```
现在,`sameIdGroups` 就是一个数组,第一个元素是按id分别存放的独特对象数组,第二个元素是所有重复id的对象数组。
阅读全文