一个数组对象 去重 去重的条件是 id 一致的 并且num 一致 然后 删除没有 type字段的
时间: 2024-10-27 10:13:59 浏览: 27
JS实现数组简单去重及数组根据对象中的元素去重操作示例
5星 · 资源好评率100%
在JavaScript中,你可以通过多种方法处理这个数组去重问题,特别是在满足特定条件(如ID和num相同,并且存在type字段)的情况下。这里是一个示例,我们将使用ES6的Array.prototype.filter()和reduce()方法来完成:
```javascript
function uniqueObjects(array, key1 = 'id', key2 = 'num', mustHaveType = true) {
// 检查数组是否包含必须有的'type'字段
const hasType = array.every(obj => obj.hasOwnProperty('type'));
if (!mustHaveType && !hasType) {
return array; // 如果不需要'type'并且不存在,则直接返回原始数组
}
// 使用filter()过滤出符合条件的对象
const filtered = array.filter(obj => {
// 对于每对ID和num相同的对象,检查它们的'type'是否存在
return array.every(o2 => o2[key1] === obj[key1] && o2[key2] === obj[key2] ? o2['type'] !== undefined : false);
});
// 使用reduce()创建一个新的唯一对象集合,键是唯一的组合(id, num)
const result = filtered.reduce((acc, cur) => {
const key = `${cur[key1]}_${cur[key2]}`;
acc[key] = cur; // 如果键不存在就添加,如果存在则替换值
return acc;
}, {});
// 将结果转换回数组形式
return Object.values(result); // 返回只包含唯一对象的新数组
}
// 示例用法
const arr = [
{ id: 1, num: 1, type: 'a' },
{ id: 1, num: 1, type: 'b' },
{ id: 2, num: 2, type: 'c' },
{ id: 1, num: 1 },
{ id: 3, num: 3 }
];
const uniqueArr = uniqueObjects(arr);
console.log(uniqueArr); // 输出:[ { id: 1, num: 1, type: 'a' }, { id: 2, num: 2, type: 'c' } ]
阅读全文