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

JavaScript中如何移除元素位置不同的多维数组重复项?

JavaScript多维数组去重(子数组元素顺序不同视为重复)

当处理多维数组时,如果子数组元素内容相同但顺序不同需要被视为重复项移除,直接用JSON.stringify对比子数组的方式会失效——因为字符串化后的结果会保留元素顺序,导致顺序不同的子数组被判定为不同项。

原数组

let originalArray = [
  ["A", "B", "C"],
  ["B", "A", "C"],
  ["D", "E", "F"]
];

现有代码的问题

这段代码无法达到期望效果,因为JSON.stringify(["A","B","C"])和JSON.stringify(["B","A","C"])结果不同,会把两个顺序不同的子数组都保留:

let uniqueArray = originalArray.filter((item, index, self) => { 
    return index === self.findIndex((t) => JSON.stringify(t) === JSON.stringify(item)); 
}); 

console.log(uniqueArray); 
// 输出:[["A","B","C"],["B","A","C"],["D","E","F"]]

解决方案:基于排序标识的去重

核心思路是先给每个子数组生成一个排序后的唯一字符串标识,再通过标识判断重复,只保留第一次出现的子数组。

完整实现代码:

// 生成每个子数组排序后的字符串标识(复制子数组再排序,避免修改原数组)
const sortedIdentifiers = originalArray.map(subArr => JSON.stringify([...subArr].sort()));

// 过滤出仅第一次出现该标识的子数组
const uniqueArray = originalArray.filter((_, index) => {
  return sortedIdentifiers.indexOf(sortedIdentifiers[index]) === index;
});

console.log(uniqueArray);
// 输出:[["A","B","C"],["D","E","F"]]

代码说明

  • [...subArr].sort():复制子数组后排序,避免修改原数组中子数组的元素顺序
  • JSON.stringify(...):将排序后的子数组转为字符串,作为判断重复的唯一标识
  • sortedIdentifiers.indexOf(...) === index:仅保留该标识第一次出现时对应的原数组子数组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:15:34