如何根据对象内部Topics数组的重复值重构任务对象数组
实现方案
以下是JavaScript版本的实现逻辑,代码可直接运行得到预期结果:
// 原始任务数组 const originTasks = [ { id: 54321, Task: 'Task 1', Topics: ["111", "222"]}, { id: 667566, Task: 'Task 2', Topics: ["222"] }, { id: 76889, Task: 'Task 3', Topics: ["333"] }, ]; // 临时映射对象,key为唯一topic名称,value为对应归集的id数组 const topicMap = {}; originTasks.forEach(task => { task.Topics.forEach(topic => { // 不存在该topic时先初始化空数组 if (!topicMap[topic]) topicMap[topic] = []; // 写入当前任务id topicMap[topic].push(task.id); }) }) // 转换为要求的输出格式 const result = Object.entries(topicMap).map(([name, id]) => ({ name, id })); console.log(result);
逻辑说明
- 用对象作为临时存储天然保证key的唯一性,不需要额外处理topic重复的问题
- 两层遍历分别处理每个任务、每个任务关联的topic,完成id归集
- 最后将对象键值对转换为目标数组结构即可
如果存在同一个任务多次关联同一个topic、需要避免id重复的场景,可以在写入id时加判断:
if (!topicMap[topic].includes(task.id)) { topicMap[topic].push(task.id); }
内容的提问来源于stack exchange,提问作者Taaa
相关产品推荐
相关产品推荐

