使用 filter 和 some 找到具有相同 id 的对象并拆成两个数组
时间: 2024-12-28 18:31:22 浏览: 5
在JavaScript中,`filter()` 和 `some()` 是数组处理中的两个实用函数。如果你想找到具有相同 ID 的对象并将它们拆分成两个数组,可以按照以下步骤操作:
1. **创建示例数据**:
```javascript
const objects = [
{id: 1, name: 'Object 1'},
{id: 2, name: 'Object 2'},
{id: 1, name: 'Object 3'},
{id: 4, name: 'Object 4'},
];
```
2. **使用 filter() 过滤出具有相同 ID 的对象**:
```javascript
const duplicatesById = objects.filter((obj, index, self) => {
return self.findIndex(o => o.id === obj.id) !== index;
});
```
这会返回一个新的数组,包含所有具有相同 ID 的对象。
3. **使用 some() 判断是否有重复对象**:
```javascript
const hasDuplicates = duplicatesById.some(obj => obj !== null);
```
这个表达式将检查`duplicatesById`数组是否非空,也就是是否存在有重复 ID 的对象。
4. **根据结果拆分数组**:
```javascript
let uniqueObjects = [];
let duplicateObjects = [];
if (hasDuplicates) {
duplicateObjects = duplicatesById;
uniqueObjects = objects.filter(obj => !duplicatesById.includes(obj));
} else {
uniqueObjects = objects;
}
console.log('Unique Objects:', uniqueObjects);
console.log('Duplicate Objects:', duplicateObjects);
```
这里假设没有重复 ID 的对象视为唯一的。如果没有`hasDuplicates`,那么`uniqueObjects`就是原始数组,而`duplicateObjects`为空。
阅读全文