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

Jef*_*eff 1 javascript arrays multidimensional-array

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

例如:

let 2dArr = [ [1, 2, 3],
              [3, 2, 1],
              [2, 4, 5],
              [4, 5, 2],
              [4, 3, 1] ];
Run Code Online (Sandbox Code Playgroud)

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

returnedArr = [ [1, 2, 3],
                [2, 4, 5],
                [4, 3, 1] ];
Run Code Online (Sandbox Code Playgroud)

到底如何才能做到这一点,保留二维数组?我只能想到循环遍历元素,通过排序比较元素,然后删除它们,但是如果删除元素,这会导致索引错误。

Pra*_*mar 6

1)reduce您可以使用和轻松获得结果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);
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

  • 需要数字排序。在这里工作正常只是因为所有都是个位数 (2认同)