我开发了许多复杂的项目。然而,我总是被困在简单的事情上。请任何人指导或分享一些关于这些常见的逻辑问题的培训文档。我有一个对象数组,这些对象可以复制。
每个对象都有一个数组属性权限:'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;
});
发布于 2020-06-19 05:03:49
这会成功的!
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);
发布于 2020-06-19 04:47:48
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'] },
];
function run(arr) {
return arr.reduce((previousValue ,currentValue) => {
let item = previousValue.find(e => e.id === currentValue.id)
if (item) {
item.permission = [...new Set([...item.permission, ...currentValue.permission])]
return previousValue
} else {
return previousValue.concat(currentValue)
}
},[])
}
console.log(run(arr))
发布于 2020-06-19 04:52:59
使用array.reduce创建id
的散列,然后使用Object.values()
访问它的值,
请在附加的代码段中找到代码
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'] },
];
const result = arr.reduce((acc, {id, permission}) => {
if (!acc[id]) {
acc[id] = {
id,
permission: [...new Set(permission)],
};
}
acc[id] = {
id,
permission: [...new Set([...acc[id].permission, ...permission])],
};
return acc;
}, {});
console.log(Object.values(result));
https://stackoverflow.com/questions/62463245
复制相似问题