美文网首页大话前端让前端飞程序员
去除数组重复元素(Array.from+Set)

去除数组重复元素(Array.from+Set)

作者: fenerchen | 来源:发表于2018-03-05 21:13 被阅读43次

    Set

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

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

    // 例一
    const set = new Set([1, 2, 3, 4, 4]);
    [...set]
    // [1, 2, 3, 4]
    
    // 例二
    const items = new Set([1, 2, 3, 4, 5, 5, 5, 5]);
    items.size // 5
    
    // 例三
    function divs () {
      return [...document.querySelectorAll('div')];
    }
    
    const set = new Set(divs());
    set.size // 56
    
    // 类似于
    divs().forEach(div => set.add(div));
    set.size // 56
    

    Array.from()

    Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括 ES6 新增的数据结构 Set 和 Map)。

    下面是一个类似数组的对象,Array.from将它转为真正的数组。

    let arrayLike = {
        '0': 'a',
        '1': 'b',
        '2': 'c',
        length: 3
    };
    
    // ES5的写法
    var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c']
    
    // ES6的写法
    let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']
    
    Array.from('hello')
    // ['h', 'e', 'l', 'l', 'o']
    
    let namesSet = new Set(['a', 'b'])
    Array.from(namesSet) // ['a', 'b']
    

    值得提醒的是,扩展运算符(...)也可以将某些数据结构转为数组。

    [...new Set(array)]
    

    去除数组重复元素

    [...new Set(array)]
    
    Array.from(new Set(array));
    
    非es6去重

    1、时间复杂度o(n)

    function fn(arr) {
            let obj = {};
            arr.forEach((item) => {
                obj[item] = '';//只保存最后出现的键为准,从而去重
            })
            return Object.keys(obj)
        }
    

    2、时间复杂度o(n*n)

    function fn(arr) {
               return arr.filter((item, index, arr) =>arr.indexOf(item) === index)     //第一次出现的的元素下标才等于下标
           }
    

    相关文章

      网友评论

        本文标题:去除数组重复元素(Array.from+Set)

        本文链接:https://www.haomeiwen.com/subject/vxhkfftx.html