手写系列 - Array 去重相关

101 阅读1分钟

Set 去重

const arr = [1, 2, 3, 5, 1, 5, 9, 1, 2, 8];

const arr1 = Array.from(new Set(arr))

console.log(arr1);

手写去重

function uniqueArray(nums) {
  let map = new Map();
  let res = [];
  for (let num of nums) {
    if (map.has(num)) {
      map.set(num, true) // 后面的true 代表该 key 值在原始数组中重复了,false反之
    } else {
      map.set(num, false)
      res.push(num)
    }
  }
  return res;
}

const arr = [1, 2, 3, 5, 1, 5, 9, 1, 2, 8];
console.log(uniqueArray(arr))

找到数组中重复的数

function findRepeat(nums) {
  let res = [];
  let map = new Map()

  for (let num of nums) {
    map.set(num, map.has(num))
  }

  for (let [key, value] of map.entries()) {
    if (value === true) {
      res.push(key);
    }
  }
  return res;
}

const arr = [1, 2, 3, 5, 1, 5, 9, 1, 2, 8];
console.log(findRepeat(arr));

数组中第一个非重复的数

function findFirstNoRepeat(nums) {
  let res = []
  let map = new Map()

  for (let num of nums) {
    map.set(num, map.has(num));
  }
  for (let [key, value] of map.entries()) {
    if (value === false) {
      return key;
    }
  }
  return "全部重复"

}
const arr = [1, 2, 3, 5, 1, 5, 9, 1, 2, 8];
console.log(findFirstNoRepeat(arr));