es6 一句话数组去重

let arr=['1','a','a','3','1']

let a=Array.from(new Set(arr))

或者这么写,用扩展运算符(...),扩展运算符内部调用的是数据结构的 Iterator 接口

let a=[...new Set(arr)]

结果a为["1" , "a" , "3"]

 

拓展1:Set 实例

1.Set 结构的实例有以下属性

  Set.prototype.constructor:构造函数,默认就是Set函数

  Set.prototype.size:返回Set实例的成员总数

 

2.Set 实例的方法分为两大类:操作方法(用于操作数据)和遍历方法(用于遍历成员)

  2.1.下面先介绍四个操作方法

    add(value):添加某个值,返回 Set 结构本身

    delete(value):删除某个值,返回一个布尔值,表示删除是否成功

    has(value):返回一个布尔值,表示该值是否为Set的成员

    clear():清除所有成员,没有返回值

 

  2.2.然后是四个遍历方法,可以用于遍历成员

    keys():返回键名的遍历器

    values():返回键值的遍历器

    entries():返回键值对的遍历器

    forEach():使用回调函数遍历每个成员

 

拓展2:Array.from()

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

       1.只要是部署了 Iterator 接口的数据结构,Array.from都能将其转为数组。

       2.另一个应用是,将字符串转为数组,然后返回字符串的长度

  3.Array.from的第一个参数指定了第二个参数运行的次数。这种特性可以让该方法的用法变得非常灵活

  Array.from({ length: 2 }, () => 'jack')
  // ['jack', 'jack']
 

 

拓展3:扩展运算符(...),的应用

  1.复制数组

  数组是复合的数据类型,直接复制的话,只是复制了指向底层数据结构的指针,而不是克隆一个全新的数组。

  ES5 只能用变通方法来复制数组:

    const a1 = [1, 2];

    const a2 = a1.concat();

  扩展运算符提供了复制数组的简便写法:

    const a2 = [...a1];

    或

    const [...a2] = a1;

  2.合并数组

  3.与解构赋值结合, 扩展运算符可以与解构赋值结合起来,用于生成数组

  4.字符串,扩展运算符还可以将字符串转为真正的数组

  5.实现了 Iterator 接口的对象,任何定义了遍历器(Iterator)接口的对象(参阅 Iterator 一章),都可以用扩展运算符转为真正的数组

  6.Map 和 Set 结构,Generator 函数,扩展运算符内部调用的是数据结构的 Iterator 接口,因此只要具有 Iterator 接口的对象,都可以使用扩展运算符,比如 Set 结构。

 

 

本文参考来自:http://es6.ruanyifeng.com/#docs/array

 

 




posted @ 2019-05-23 09:41  四国诸葛不亮  阅读(1349)  评论(0编辑  收藏  举报