首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除重复对象并将其数组元素与其他Javascript合并

删除重复对象并将其数组元素与其他Javascript合并
EN

Stack Overflow用户
提问于 2020-06-19 04:25:29
回答 4查看 64关注 0票数 1

我开发了许多复杂的项目。然而,我总是被困在简单的事情上。请任何人指导或分享一些关于这些常见的逻辑问题的培训文档。我有一个对象数组,这些对象可以复制。

每个对象都有一个数组属性权限:'add','remove‘。我希望删除可重复对象并获取其权限数组属性,并将其与我们找到的对象合并。权限数组应该具有唯一的值。

请指点我一些网站或一本书,帮助我解决逻辑问题。

代码语言:javascript
运行
复制
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'] },
];
代码语言:javascript
运行
复制
// 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'] },
];
代码语言:javascript
运行
复制
// Tried so far 

const seen = new Set();

const fa = arr.filter((el) => {
  const duplicate = seen.has(el.id);
  seen.add(el.id);
  return !duplicate;
});
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-06-19 05:03:49

这会成功的!

代码语言:javascript
运行
复制
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);

票数 0
EN

Stack Overflow用户

发布于 2020-06-19 04:47:48

代码语言:javascript
运行
复制
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))

票数 1
EN

Stack Overflow用户

发布于 2020-06-19 04:52:59

使用array.reduce创建id的散列,然后使用Object.values()访问它的值,

请在附加的代码段中找到代码

代码语言:javascript
运行
复制
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));

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62463245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档