javascript - 如何使用 javascript 对重复对象的 ID 进行分组并删除数组中的对象
问题描述
我想在从匹配的(已经存在的)对象 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)
请帮助以更好的方式达到预期的结果。
解决方案
首先{ [title]: keys[] }
使用创建反向对象reduce
然后将其映射回您需要的对象更容易array
const input = [
{ id: 2, title: "men" },
{ id: 3, title: "women" },
{ id: 1, title: "kids" },
{ id: 4, title: "sports" },
{ id: 5, title: "women" },
{ id: 6, title: "kids" },
];
const output = input.reduce((acc, { id, title }) => {
const val = acc[title];
if (val) {
acc[title] = Array.isArray(val) ? [...val, id] : [val, id];
} else {
acc[title] = id;
}
return acc;
}, {});
const result = Object.keys(output).map((key) => ({
id: output[key],
title: key,
}));
console.log(result);
推荐阅读
- java - 尝试获取具有特定名称的客户时,加密提示 EOFException
- r - 使用 R 删除 S3 中的文件夹
- spring-webflux - 使用功能 WebFlux 时将字符串转换为日期
- ios - 合并或附加两个相同结构的数据模型以在 Swift 中发布值
- angular - Gitlab CI Angular Artifacts 无法访问
- wordpress - 如何在多个外部数字平台中为单个书名创建 Wordpress 搜索按钮?
- python - 分组并查找属于 n 个唯一最大值的所有值
- xcode - 无法附加 pid 时如何在 Xcode 上调试 Safari 应用程序扩展
- c# - Xamarin 中的 [程序集:Dependency()] 是什么?
- ssrs-2008 - 汇总 ssrs 中的报告项