javascript - 如何使用 javascript 对重复对象的 ID 进行分组并删除数组中的对象

标签 javascript arrays ecmascript-6

我想在将匹配的(已存在的)对象 ID 中的重复对象 ID 分组后,从数组中删除重复的对象。 无论我尝试过什么,都是对 ID 进行分组,但不知道如何从数组中删除重复的对象。

原始数组

        [
         {id:2,title:'men'},
         {id:3,title:'women'},
         {id:1,title:'kids'},
         {id:4,title:'sports'}, 
         {id:5, title:'women'},
         {id:6,title:'kids'}
       ];

预期数组

 [
   { id: 2, title: 'men' },
   { id: [3,5], title: 'women' },
   { id: [1,6], title: 'kids' },
   { id: 4, title: 'sports' }
 ]

尝试过

let array = [{id:2,title:'men'},{id:3,title:'women'},{id:1,title:'kids'},
{id:4,title:'sports'}, {id:5, title:'women'},{id:6,title:'kids'}];

for(let i=0; i<array.length-1;i++){
    for(let j=i+1; j<array.length; j++){
        if(array[i].title===array[j].title)
         array[i]={id:[array[i].id, array[j].id], title: array[i].title}
    }
}
console.log(array)

请帮助以更好的方式达到预期结果。

最佳答案

let items = [{
        id: 2,
        title: 'men'
    },
    {
        id: 3,
        title: 'women'
    },
    {
        id: 1,
        title: 'kids'
    },
    {
        id: 4,
        title: 'sports'
    },
    {
        id: 5,
        title: 'women'
    },
    {
        id: 6,
        title: 'kids'
    }
];

let dest = [];

items.forEach(x => {
    let find;
    if (find = dest.find(y => y.title === x.title)) {
        find.id = Array.isArray(find.id) ? [...find.id, x.id] : [find.id, x.id]
    } else {
        dest.push(x)
    }
})

console.log(dest)

关于javascript - 如何使用 javascript 对重复对象的 ID 进行分组并删除数组中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67750064/

相关文章:

javascript - 从 AsyncStorage 中删除特定项目

arrays - lodash - 将对象移动到数组中的第一个位置?

mysql - 如何替换json数组的标签并在数组之前添加信息

arrays - 在 Google Bigquery 中访问 ARRAY STRUCT 中的值

javascript - 如何从 querySelectorAll 获取所有元素并与 addEventListener 一起使用

javascript - 循环数组属性和中断

javascript - 提交表单后如何重置表单和验证(AngularJS)

javascript - 循环遍历数组对象并构造一个对象

javascript - 为什么 ES6 Symbol 属性可以被 Object.defineProperty 枚举?

javascript - 无法导入模块的属性