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

遍历Question数组提取唯一Categories至新数组的方案咨询

解决方案:收集并去重分类数组

嘿,这个需求很常见,我给你几个实用的JavaScript实现方案,都能快速得到你想要的结果:

方法1:用flatMap + Set(最简洁)

这是现代JS里最推荐的写法,一行核心代码就能搞定:

// 你的原始数据(修正了对象键的引号,符合JS语法规范)
const data = {
  questions: [
    { question: 'lala', answer: 'papa', categories: ['Handla'] },
    { question: 'xxxx', answer: 'yyyy', categories: ['Reklamation'] },
    { question: 'abcefg', answer: 'gooooogle', categories: ['Reklamation'] }
  ]
};

// 核心处理代码
const uniqueCategories = [...new Set(data.questions.flatMap(item => item.categories))];

console.log(uniqueCategories); // 输出: ["Handla", "Reklamation"]

逻辑拆解:

  • flatMap(item => item.categories):遍历所有question对象,把每个对象的categories数组展开成一维数组,得到['Handla', 'Reklamation', 'Reklamation']
  • new Set(...):利用Set自动去重的特性,把重复的Reklamation过滤掉
  • [...]:把Set对象转回普通数组,就是最终的去重结果

方法2:兼容旧环境的写法(map + concat + Set)

如果你的运行环境不支持flatMap(比如一些旧版浏览器),可以用这个替代方案:

const data = { /* 同上的原始数据 */ };

// 先把所有分类合并成一维数组
const allCategories = [].concat(...data.questions.map(item => item.categories));
// 再进行去重处理
const uniqueCategories = [...new Set(allCategories)];

console.log(uniqueCategories);

逻辑拆解:

  • map(item => item.categories):先得到一个二维数组[['Handla'], ['Reklamation'], ['Reklamation']]
  • [].concat(...arr):用扩展运算符把二维数组展开,合并成一维数组
  • 后续的Set去重和转数组步骤和方法1完全一致

方法3:手动循环实现(适合理解基础逻辑)

如果你想更清晰地控制每一步流程,可以用双层循环手动完成收集和去重:

const data = { /* 同上的原始数据 */ };
const uniqueCategories = [];

// 遍历每个question对象
for (const question of data.questions) {
  // 遍历当前对象的所有分类
  for (const category of question.categories) {
    // 如果分类还没在结果数组里,就添加进去
    if (!uniqueCategories.includes(category)) {
      uniqueCategories.push(category);
    }
  }
}

console.log(uniqueCategories);

逻辑拆解:

  • 外层循环逐个处理每个question对象,内层循环遍历该对象的所有分类
  • 每次检查当前分类是否已经存在于结果数组中,只有不存在的时候才添加,自然实现去重效果

这三个方法都能满足你的需求,根据你的代码运行环境和个人习惯选择就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:27:39