You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何处理多层对象数组的重复项并合并选项生成指定格式

分类数组去重合并并转换指定格式的解决方案

问题背景

有一个自动生成的对象数组,需要完成以下操作:

  • 清理数据:去除分类重复项,合并同一分类下的不重复选项
  • 转换为指定格式的字符串

示例输入

const categories = [
  { category: "mammal", options: ["horse", "cow"] },
  { category: "mammal", options: ["pig", "cow"] },
  { category: "gender", options: ["male"] },
  { category: "mammal", options: ["cow"] },
  { category: "mammal", options: ["pig"] },
  { category: "gender", options: ["female"] }
];

期望输出

mammal>horse;cow;pig/gender>male;female/

现有尝试及问题

尝试代码1仅得到去重后的分类列表:

const newArr = [];

for (let i = 0; i < categories.length; i++) {
    categoryIsInArray = newCat.indexOf(categories[i].category) !== -1;
    if (categoryIsInArray === true) {
         // do something with the options
    }
    else {
        newArr.push(categories[i].category)
    }
}

结果:

["mammal","gender"]

尝试代码2逻辑混乱,导致结果错误:

const newArr = [];

for (let i = 0; i < categories.length; i++) {
    categoryIsInArray = newCat.indexOf(categories[i].category) !== -1;
    if (categoryIsInArray === true) {
        for (let j = 0; j < categories[i].options.length; j++) {
            optionIsInArray = newCat.indexOf(categories[i].options[j]) !== -1;
            if(optionIsInArray === false) {
                newCat.push(categories[i].options)
            }
        }
    }
    else {
        newArr.push(categories[i].category)
    }
}

错误结果:

[
    'mammal',
    ['horse', 'cow'],
    ['horse', 'cow'],
    'gender',
    ['cow'],
    ['horse'],
    ['female']
]

解决方案

核心思路是用对象存储分类与对应去重选项,利用对象键的唯一性管理分类,用Set自动去重选项,最后拼接成目标字符串。

完整代码

// 1. 创建空对象,存储分类和对应的去重选项
const categoryMap = {};

// 2. 遍历原数组,填充categoryMap
categories.forEach(item => {
  const { category, options } = item;
  // 分类不存在则初始化空Set
  if (!categoryMap[category]) {
    categoryMap[category] = new Set();
  }
  // 将选项添加到Set自动去重
  options.forEach(opt => categoryMap[category].add(opt));
});

// 3. 转换为目标格式字符串
const result = Object.entries(categoryMap)
  .map(([cat, opts]) => `${cat}>${Array.from(opts).join(';')}`)
  .join('/') + '/';

console.log(result);
// 输出:mammal>horse;cow;pig/gender>male;female/

代码解释

  1. 创建categoryMap:键为分类名称,值为Set类型,利用Set的特性自动去重选项。
  2. 遍历原数组:
    • 取出每个对象的category和options
    • 若分类不在categoryMap中,创建新的Set
    • 将当前选项全部添加到对应分类的Set中,重复值会被自动忽略
  3. 转换为目标字符串:
    • 用Object.entries将categoryMap转为键值对数组
    • 把每个键值对拼接成分类>选项1;选项2的格式
    • 用/连接所有拼接后的字符串,最后追加一个/

内容的提问来源于stack exchange,提问作者UntitledGraphic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 01:08:36