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

如何根据指定键数组过滤对象并合并对应值为无重复的新数组?

如何根据指定键数组过滤对象并合并对应值为无重复的新数组?

嗨,我来帮你解决这个问题~首先得指出你之前代码里的小问题:data是一个对象,而filter是数组的方法,所以直接用data.filter()肯定是行不通的,这就是你代码没生效的原因哦。

针对你的需求,我们可以分两步走:先把指定键对应的数组合并成一个大数组,再去掉里面的重复项。这里给你两种实现方式,你可以根据自己的环境选择:

方法一:用flatMap+Set(现代JS环境推荐)

这种写法简洁高效,一步到位:

const data = {
  'TypeA': ['A1', 'A2', 'A3', 'A4'],
  'TypeB': ['B1', 'B2', 'B3', 'B4'],
  'TypeC': ['C1', 'C2', 'C3', 'C4'],
};
const array = ['TypeA', 'TypeB'];

// 核心代码
const result = [...new Set(array.flatMap(key => data[key] || []))];

console.log(result);
// 输出:['A1', 'A2', 'A3', 'A4', 'B1', 'B2', 'B3', 'B4']

我给你拆解下每一步的作用:

  • array.flatMap(key => data[key] || []):遍历你指定的键数组,取出每个键对应的数组,flatMap会自动把多个数组合并成一维数组;加|| []是为了避免某个键在data里不存在时返回undefined,保证代码不会报错。
  • new Set(...):利用Set不能存重复值的特性,自动帮我们去掉合并数组里的重复项。
  • [...new Set(...)]:把Set转换回数组格式,得到最终的无重复结果。

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

如果你的项目需要兼容不支持flatMap的旧浏览器,可以用这种方式:

const data = {
  'TypeA': ['A1', 'A2', 'A3', 'A4'],
  'TypeB': ['B1', 'B2', 'B3', 'B4'],
  'TypeC': ['C1', 'C2', 'C3', 'C4'],
};
const array = ['TypeA', 'TypeB'];

// 先合并数组
const mergedArray = [].concat(...array.map(key => data[key] || []));
// 再去重
const result = [...new Set(mergedArray)];

console.log(result);
// 输出和上面一致

这里用array.map()先取出所有目标数组,再用[].concat(...)把它们合并成一维,后续去重逻辑和方法一一样。

这样就能完美实现你想要的效果啦~

备注:内容来源于stack exchange,提问作者SM079

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 15:44:32