我开发了许多复杂的项目。但是,我总是陷于简单的事情中。任何人都可以指导或分享一些文档来培训这些常见的逻辑问题。我有一组对象,这些对象可以重复。
每个对象都有一个数组属性权限:['add','remove']。我想删除可重复对象并获取其权限数组属性,并将其与我们发现的对象合并。权限数组应具有唯一值。
也请引导我指向一些站点或书籍,这将帮助我解决逻辑问题
const arr = [
{ id: 1, permission: ['add', 'remove'] },
{ id: 2, permission: ['add', 'upload']},
{ id: 2, permission: ['add', 'remove', 'edit'] },
{ id: 3, permission: ['add', 'remove'] },
{ id: 4, permission: ['add', 'remove'] },
{ id: 5, permission: ['add', 'read'] },
{ id: 5, permission: ['read', 'remove'] },
{ id: 6, permission: ['add', 'remove'] },
];
// Result I am looking for.
[
{ id: 1, permission: ['add', 'remove'] },
{ id: 2, permission: ['add', 'remove', 'edit', 'upload'] },
{ id: 3, permission: ['add', 'remove'] },
{ id: 4, permission: ['add', 'remove'] },
{ id: 5, permission: ['add','read', 'remove'] },
{ id: 6, permission: ['add', 'remove'] },
];
// Tried so far
const seen = new Set();
const fa = arr.filter((el) => {
const duplicate = seen.has(el.id);
seen.add(el.id);
return !duplicate;
});
这将工作!!!
var arr = [
{ id: 1, permission: ['add', 'remove'] },
{ id: 2, permission: ['add', 'upload']},
{ id: 2, permission: ['add', 'remove', 'edit'] },
{ id: 3, permission: ['add', 'remove'] },
{ id: 4, permission: ['add', 'remove'] },
{ id: 5, permission: ['add', 'read'] },
{ id: 5, permission: ['read', 'remove'] },
{ id: 6, permission: ['add', 'remove'] },
];
var res = [];
for (var i = 0; i< arr.length; i++) {
if(res.length == 0) res.push(arr[i]);
else {
if ( !res.find(item => item.id == arr[i]['id'])) {
res.push(arr[i]);
}
else {
var resIndex = res.findIndex(item => item.id == arr[i]['id']);
for(var j=0; j<arr[i]['permission'].length; j++) {
if(res[resIndex]['permission'].indexOf(arr[i]['permission'][j]) === -1) res[resIndex]['permission'].push(arr[i]['permission'][j]);
}
}
}
}
console.log(res);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句