js 数组去重

293 阅读1分钟

数组去重

1. 利用 Set 结构

以上去方式对 NaN 和 undefined 类型去重也是有效的,是因为 NaN 和 undefined 都可以被存储在 Set 中, NaN 之间被视为相同的值(尽管在 js 中:NaN !== NaN)。

const arr = [
  1,
  2,
  2,
  "abc",
  "abc",
  true,
  true,
  false,
  false,
  undefined,
  undefined,
  NaN,
  NaN,
];
const set = new Set(arr);
const list = Array.from(set);
console.log(list); // [1, 2, 'abc', true, false, undefined, NaN]

2. 通过对象

利用对象 key 不可以重复的特点,对数组进行去重,但不可以直接对对象进行区分。

function removeDuplicate(arr) {
  const obj = {};
  const newList = [];

  arr.forEach((item) => {
    if (!obj[item]) {
      obj[item] = true;
      newList.push(item);
    }
  });

  return newList;
}

const arr = [
  1,
  2,
  2,
  "abc",
  "abc",
  true,
  true,
  false,
  false,
  undefined,
  undefined,
  NaN,
  NaN,
  {
    a: 111,
  },
  {
    a: 111,
  },
  {
    b: 111,
  },
];
const newArr = removeDuplicate(arr);
console.log(newArr);

3. 利用 Map 进行去重

而通过 Map 去重,

function removeDuplicate(arr) {
  const map = new Map();
  const newList = [];

  arr.forEach((item) => {
    if (!map.has(item)) {
      map.set(item, true);
      newList.push(item);
    }
  });

  console.log(map);
  return newList;
}

var obj1 = { a: 111 };
var obj2 = { b: 111 };
const arr = [
  1,
  2,
  2,
  "abc",
  "abc",
  true,
  true,
  false,
  false,
  undefined,
  undefined,
  NaN,
  NaN,
  obj1,
  obj1,
  obj2,
];
removeDuplicate(arr);

4. 通过遍历

遍历是最常用的,网上说的多种去重,很多仅仅是使用不同的Array api 而已,如 includesindexOf

const arr = [
  1,
  2,
  2,
  "abc",
  "abc",
  true,
  true,
  false,
  false,
  undefined,
  undefined,
  NaN,
  NaN,
];

let list = [];

arr.forEach((item) => {
  const flag = list.some((sub) => sub === item);
  if (!flag) list.push(item);
});

console.log(list); // [1, 2, 'abc', true, false, undefined, NaN, NaN]