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

如何基于CategoryDesc与SubCatDesc两个属性获取数组去重值?

JavaScript数组按多属性组合去重实现方案

针对你需要按CategoryDesc和SubCatDesc两个属性组合去重的需求,这里提供几种简洁实用的实现方式:

方法1:Set结合JSON.stringify序列化

这种方式利用Set自动去重的特性,先将每个对象序列化为字符串,去重后再转回对象:

const array = [
  { "CategoryDesc":"SEC Violations (Insider Trading, Securities Fraud)", "SubCatDesc":"BBC"},
  { "CategoryDesc":"SEC Violations (Insider Trading, Securities Fraud)", "SubCatDesc":"BBC"},
  { "CategoryDesc": "FRD" ,"SubCatDesc":"VRD"},
  { "CategoryDesc": "FRD" ,"SubCatDesc":"VRD"},
  { "CategoryDesc":"SEC Violations (Insider Trading, Securities Fraud)", "SubCatDesc":"BBC"},
  { "CategoryDesc":"FRD", "SubCatDesc":"BBC"}
];

const uniqueArray = Array.from(new Set(array.map(item => JSON.stringify(item)))).map(str => JSON.parse(str));
console.log(uniqueArray);

说明:如果数组中对象的属性顺序完全一致,这个方法可以直接用;如果属性顺序可能不同,建议用下面的方法。

方法2:reduce+对象映射(推荐)

通过自定义唯一键(两个属性拼接),用reduce遍历数组并存储唯一的对象,效率更高:

const array = [
  { "CategoryDesc":"SEC Violations (Insider Trading, Securities Fraud)", "SubCatDesc":"BBC"},
  { "CategoryDesc":"SEC Violations (Insider Trading, Securities Fraud)", "SubCatDesc":"BBC"},
  { "CategoryDesc": "FRD" ,"SubCatDesc":"VRD"},
  { "CategoryDesc": "FRD" ,"SubCatDesc":"VRD"},
  { "CategoryDesc":"SEC Violations (Insider Trading, Securities Fraud)", "SubCatDesc":"BBC"},
  { "CategoryDesc":"FRD", "SubCatDesc":"BBC"}
];

const uniqueMap = array.reduce((acc, current) => {
  // 用两个属性拼接成唯一标识键,选不会出现在属性值里的符号当分隔符
  const key = `${current.CategoryDesc}|${current.SubCatDesc}`;
  // 键不存在时才存入对象
  if (!acc[key]) acc[key] = current;
  return acc;
}, {});

// 提取对象中的值组成去重后的数组
const uniqueArray = Object.values(uniqueMap);
console.log(uniqueArray);

方法3:ES6 Map结构实现

和方法2逻辑类似,用Map存储唯一键值对,语义更清晰:

const array = [
  { "CategoryDesc":"SEC Violations (Insider Trading, Securities Fraud)", "SubCatDesc":"BBC"},
  { "CategoryDesc":"SEC Violations (Insider Trading, Securities Fraud)", "SubCatDesc":"BBC"},
  { "CategoryDesc": "FRD" ,"SubCatDesc":"VRD"},
  { "CategoryDesc": "FRD" ,"SubCatDesc":"VRD"},
  { "CategoryDesc":"SEC Violations (Insider Trading, Securities Fraud)", "SubCatDesc":"BBC"},
  { "CategoryDesc":"FRD", "SubCatDesc":"BBC"}
];

const uniqueMap = new Map();
array.forEach(item => {
  const key = `${item.CategoryDesc}|${item.SubCatDesc}`;
  if (!uniqueMap.has(key)) {
    uniqueMap.set(key, item);
  }
});

const uniqueArray = Array.from(uniqueMap.values());
console.log(uniqueArray);

以上三种方法都能得到你预期的去重结果,其中方法2和3在性能和兼容性上表现更优,推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:45:33