去重

215 阅读1分钟

著名面试题:
如何实现数组去重?
假设有数组 array = [1,5,2,3,4,2,3,1,3,4]
你要写一个函数 unique,使得
unique(array) 的值为 [1,5,2,3,4]

1.不使用 Set,借鉴计数排序的原理

array = [1, 5, 2, 3, 4, 2, 3, 1, 3, 4];
      unique = (array) => {
        const array1 = [];
        for (let i = 0; i < array.length; i++) {
          array1[array[i]] = true;
        }
        const result = [];
        for (let k in array1) {
          result.push(k);
        }
        return result;
      };

image.png

缺点:此法只支持数字或者字符串数组,如果数组里面有对象,就会出错。

image.png

image.png

2.使用set

array = [1, 5, 2, 3, 4, 2, 3, 1, 3, 4];
unique = (array) => {
        return [new Set(array)];
      };

image.png

缺点:API 太新,旧浏览器不支持

  1. 使用 Map
    array = [1, 5, 2, 3, 4, 2, 3, 1, 3, 4];
    unique = (array) => {\
    let map = new Map();\
    let result = []\
    for (let i = 0; i < array.length; i++) {\
    if(map.has(array[i])) { // 判断 map 中是否已有该 key\
    continue\
    } else { // 如果 map 中没有该 key,就加入 result 中\
    map.set(array[i], true);\
    result.push(array[i]);\
    }\
    }\
    return result;\
    }

image.png

缺点:API 太新,旧浏览器不支持