数组去重

ES6写法

使用Map

 function fun(data) {
      const aMap = new Map();
      return data.filter(e => !aMap.has(e) && aMap.set(e, 1));
    }
    console.log(fun([1, 2, 3, 2, 2, 3, 3, 5, 6, 4, 5]))

 

使用Set

ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。

Set本身是一个构造函数,用来生成 Set 数据结构。

    let arr = [1, 0, 0, 2, 9, 8, 3, 1];
    function unique(arr) {
      return Array.from(new Set(arr))
    }
    console.log(unique(arr));   // [1,0,2,9,8,3]

 let arr = [1, 0, 0, 2, 9, 8, 3, 1];
 function unique(arr) {
    return [...new Set(arr)]
 }
 console.log(unique(arr));   // [1,0,2,9,8,3]

上面的方法也可以用于,去除字符串里面的重复字符。

[...new Set('ababbc')].join('')
// "abc"

 

 

ES5写法

1 普通数组

fun(data) {
    const obj: any = {};
    const result = [];
    for (const item of data) {
      if (!obj[item]) {
        result.push(item);
        obj[item] = 1;
      }
    }
    return result;
  }

 

2 对象数组

fun(data: Array<any>) {
    const obj: any = {};
    const result = [];
    for (const item of data) {
      if (!obj[item.Id]) {
        result.push(item);
        obj[item.Id] = 1;
      }
    }
    return result;
  }

 

3 两个数组

fun(a: any[], b: any[]): any[] {
    const arr = a.concat(b);
    const result = [];
    const obj: any = {};

    for (const item of arr) {
      if (!obj[item]) {
        result.push(i);
        obj[item] = 1;
      }
    }

    return result;
  }

 

posted @ 2021-01-29 17:50  litiyi  阅读(72)  评论(0编辑  收藏  举报