资讯专栏INFORMATION COLUMN

ES6成员Set的用法

wangshijun / 360人阅读

Set是一个可存储基础类型及引用类型的容器,且容器中数据唯一。
(唯一:除NaN==NaN外,其余使用===判断)

常用属性与方法:

Set.prototype.size         -- 返回Set实例的个数

Set.prototype.add()        --添加元素
Set.prototype.delete()    --删除元素
Set.prototype.has()        --判断是否存在某元素
Set.prototype.clear()    --清空容器

Set.prototype.forEach()    --遍历容器
Set.prototype.keys()    --返回容器键名遍历器
Set.prototype.values()    --返回容器键值遍历器器
Set.prototype.entries()    --返回容器键值对的遍历器

基本用法:

//创建容器
let s = new Set();

//添加基本类型元素 --元素compare不存在隐式转换 使用===,切记
s.add(1);
s.add("1");

//添加特殊类型元素  --特例 NaN与NaN 比较结果返回true
s.add(NaN);
s.add(NaN);

//添加引用类型元素 -- 直接添加引用地址不同,所以属于两个元素
s.add({a:1});
s.add({a:1});

//添加对象的形式,则只会添加一个元素进去
let obj = {a:2};
s.add(obj);
s.add(obj);

console.log([...s]); //添加顺序与数组push一样
/* [1, "1", {…}, {…}, NaN, {…}]
    0: 1
    1: "1"
    2: {a: 1}
    3: {a: 1}
    4: NaN
    5: {a: 2}
    length: 6
*/

//判断元素是否存在容器中 存在返回true,不存在返回false
s.has(obj)
//true

s.has({a:1})
//false

s.has("1")
//true

//删除元素 -- 删除成功返回true,失败返回false
s.delete({a:1}); 
//false  

s.delete(obj)
//true

console.log([...s]);
/* [1, "1", {…}, {…}, NaN]
    0:1
    1:"1"
    2:{a: 1}
    3:{a: 1}
    4:NaN
    length:5
*/

//size属性存储容器元素个数
console.log(s.size)
//5

//清空容器
s.clear(); 
s.size;
//0

遍历:

keys()        -- 返回键名的遍历器
values()    -- 返回键值的遍历器
entries()    -- 返回键值对的遍历器
注意: Set的遍历顺序即为添加顺序,且Set没有键名,故Set的键名与键值为同一值

let s = new Set(["a",11,{a:1},NaN]);
s.keys();
//SetIterator {"a", 11, {…}, NaN}

[...s.keys()] //--转化为数组形式
//["a", 11, {…}, NaN]

//遍历容器的键名
for(let item of s.keys()){
    console.log(item);
}
/*
    a
    11
    {a: 1}
    NaN
*/

//----values()与entries()用法同上
----------------------------------------------------------
/*
    forEach()    -- 使用回调函数遍历每个元素
    第一个参数为遍历函数 函数参数依次为:键值、键名、集合本身,且参数可选
    第二个参数可传入内部this对象(可选参数)
*/

//仅仅使用遍历的用法 -- 常用
s.forEach((v,k,obj)=>{
  console.log(k+":"+v);
  console.log(obj);
});
/*
    a:a
    Set(4) {"a", 11, {…}, NaN}
    11:11
    Set(4) {"a", 11, {…}, NaN}
    [object Object]:[object Object]
    Set(4) {"a", 11, {…}, NaN}
    NaN:NaN
    Set(4) {"a", 11, {…}, NaN}
*/

//第二个参数用法
let op = {
  minus:function(x){
    return x*x;
  }
};
let ss = [1,2,3,4,5,6];
ss.forEach((v)=>console.log(op.minus(v)),op);
/*
    1
    4
    9
    16
    25
    36
*/

Set的使用场景:

//数组去重:
let arr = [1,23,4,4,56,5,56];
arr = [...new Set(arr)];
//[1, 23, 4, 56, 5]

//数组的并集、交集与差集
let a = [1,3,5,7,10];
let b = [1,2,4,6,8,10];

//并集
[...new Set([...a,...b])];
//[1, 3, 5, 7, 10, 2, 4, 6, 8]

//交集
let sss = new Set(b);
a.filter(i=>sss.has(i))
//[1, 10]

//差集
a.filter(i=>!sss.has(i));
//[3, 5, 7]

第一次写文章,如有bug,请指正Thanks♪(・ω・)ノ

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/94488.html

相关文章

  • 细说es6Set和Map

    摘要:返回一个布尔值,表示该值是否为的成员。返回键名的遍历器返回键值的遍历器返回键值对的遍历器使用回调函数遍历每个成员需要特别指出的是,的遍历顺序就是插入顺序。该数组的所有成员,都会自动成为实例对象的成员。这意味着,数组的成员只能是对象。 1.Set ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。Set 本身是一个构造函数,用来生成 Set 数据结构...

    Ryan_Li 评论0 收藏0
  • ES6数据结构:set和map

    摘要:提供了新的数据结构。用法结构有以下属性构造函数,默认就是函数。结构有以下方法添加某个值,返回结构本身。返回一个布尔值,表示该值是否为的成员。清除所有成员,没有返回值。 Set ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。 用法:new Set([iterable]) const set = new Set([1, 2, 3, 4, 4, 4]...

    VPointer 评论0 收藏0
  • ES6新增Set、Map数据结构

    摘要:数据类型基本用法提供了一种类似于数组的新的数据结构。实例属性和方法本身是一个构造函数,用来生成数据结构。返回一个布尔值,表示该值是否为的成员。任何具有接口且每个成员都是一个双元素的数组的数据结构都可以当作构造函数的参数。 Set数据类型 基本用法 ES6 提供了一种类似于数组的新的数据结构 Set。它的成员的值都是唯一的,没有重复的值。 const s = new Set(); [2...

    lentoo 评论0 收藏0
  • es6:常用命令(2)

    摘要:本身是一个构造函数,用来生成数据结构。结构具有的属性构造函数,默认是函数。举例链式删除某个键清空对象是一个构造函数,用来生成实例,是异步编程的一种解决方案。构造函数接受一个函数作为参数,该函数的两个参数分别是函数和。 1、 Set 和 Map数据结构 Set 数据结构 Set 类似数组,但是成员是唯一的,不存在重复值。 Set本身是一个构造函数,用来生成Set数据结构。 Set...

    wua_wua2012 评论0 收藏0
  • ES6Set数据结构

    摘要:是提供的一种新的数据结构,它允许你存储任何类型的唯一值,而且中的元素是唯一的。我们用操作符来生成一个对象基本用法元素是唯一的可以用来数组去重属性和方法结构的实例有以下属性构造函数,默认就是函数。返回实例的成员总数。 Set 是ES6提供的一种新的数据结构,它允许你存储任何类型的唯一值,而且Set中的元素是唯一的。 我们用new操作符来生成一个Set对象 基本用法 let arr = ...

    lk20150415 评论0 收藏0

发表评论

0条评论

wangshijun

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<