删除 Javascript 中二维数组中相同元素的数组

Deleting arrays of same elements in 2 dimensional array in Javascript

我想知道您将如何删除二维数组中包含相同元素的数组。

例如:

let 2dArr = [ [1, 2, 3],
              [3, 2, 1],
              [2, 4, 5],
              [4, 5, 2],
              [4, 3, 1] ];

这个数组会删除第二个和第四个元素,返回二维数组:

returnedArr = [ [1, 2, 3],
                [2, 4, 5],
                [4, 3, 1] ];

如何做到这一点,保留二维数组?我只能考虑遍历元素,通过排序比较元素,并在进行时删除它们,但是如果删除元素,这将导致索引错误。

1) 您可以使用 reduce and Set 轻松实现结果:

let twodArr = [
  [1, 2, 3],
  [3, 2, 1],
  [2, 4, 5],
  [4, 5, 2],
  [4, 3, 1],
];

const set = new Set();

const result = twodArr.reduce((acc, curr) => {
  const key = [...curr].sort((a, b) => a - b).join();
  if (!set.has(key)) {
    set.add(key);
    acc.push(curr);
  }
  return acc;
}, []);

console.log(result);

2) 您还可以将过滤器用作:

let twodArr = [
  [1, 2, 3],
  [3, 2, 1],
  [2, 4, 5],
  [4, 5, 2],
  [4, 3, 1],
];

const set = new Set();

const result = twodArr.filter((curr) => {
  const key = [...curr].sort((a, b) => a - b).join();
  return !set.has(key) ? (set.add(key), true) : false;
});

console.log(result);

您可以使用哈希映射

let arr = [ [1, 2, 3], [3, 2, 1],[2, 4, 5],[4, 5, 2],[4, 3, 1] ];
let obj = {}
let final = []

for(let i=0; i<arr.length; i++){
  // create a key
  let sorted = [...arr[i]].sort((a,b)=> a- b).join`,`
  // check if this is not present in our hash map
  // add value to final out and update hash map accordingly
  if(!obj[sorted]){
    obj[sorted] = true
    final.push(arr[i])
  }
}

console.log(final)

使用 Array.prototype.filter() 和 Set as thisArg

let arr = [ [1, 2, 3],
              [3, 2, 1],
              [2, 4, 5],
              [4, 5, 2],
              [4, 3, 1] ];


let res = arr.filter(function(e){
    const sorted = [...e].sort((a,b) => a-b).join('|');
    return this.has(sorted) ? false : this.add(sorted)    
},new Set)

console.log(res)

const seen = []

const res = array.filter((item) => {
  let key = item.sort().join()
  if(!seen.includes(key)){
    seen.push(key)
    return item
  }
})

console.log(res)