es6去重, 如果id >1的话,根据id不能相等去重, 如果id == 0, 根据type不能相等重复, 如果id==1 的tag 和 type不能重复
时间: 2024-12-12 10:23:44 浏览: 7
在ES6中,要去重数据通常会涉及到数组操作。对于你提到的规则,我们可以创建一个函数,例如使用`filter()`和`indexOf()`结合来实现。这里是一个示例:
```javascript
function deduplicate(array) {
// 首先处理 id == 0 的情况,根据 type 去重
const duplicates0 = array.filter(item => item.id === 0 && array.indexOf(item, 1) !== -1);
const uniqueType0 = array.filter(item => item.id === 0).filter((item, index, self) => self.findIndex(o => o.type === item.type) === index);
// 然后处理 id > 1 的情况,根据 id 去重
const duplicates1 = array.filter(item => item.id > 0 && array.indexOf(item, duplicates0.length + uniqueType0.length) !== -1);
// 最后处理 id == 1 的 tag 和 type 结合的情况
const duplicates1TagAndType = array
.filter(item => item.id === 1)
.filter((item, index) => {
const sameTagAndTypeIndex = array.findIndex(o => o.id === 1 && o.tag === item.tag && o.type === item.type);
return sameTagAndTypeIndex !== index;
});
// 合并去重后的结果
const result = [...uniqueType0, ...duplicates1, ...duplicates1TagAndType];
return result;
}
// 示例用法
const data = [
{ id: 0, type: 'A', tag: 'a' },
{ id: 1, tag: 'b', type: 'B' },
{ id: 1, tag: 'c', type: 'B' }, // 这将被去除
{ id: 0, type: 'B', tag: 'a'}, // 这将被去除
{ id: 2, tag: 'd', type: 'C' },
];
console.log(deduplicate(data));
阅读全文