深入浅出:ES6中的Set数据结构应用详解

更新:11-07 民间故事 我要投稿 纠错 投诉

该参数不是必需的。如果传递一个可迭代对象,它的所有元素都将被添加到新的Set 中。如果没有这个参数,Set 将为空。

返回一个新的Set 对象

简述

设置对象是值的集合。元素只会出现一次,即Set中的元素是唯一的。

值得注意的是,Set 认为NaN 相同而{} 认为不同

var set=new Set([{},{}])

放//{{},{}}

set.size //2var set=new Set([NaN,NaN])

设置//{NaN}

set.size //1

set对象与数组之间的转换

var arr=[1,2,3,4,4];

var set=new Set(arr) //数组转换set对象

设置//{1,2,3,4}

//方法一

Array.from(set) //[1,2,3,4]

//方法2

[.设置] //[1,2,3,4]

set与字符串

var str="siiva";

new Set(str) //{"s","i","v","a"}

Set.prototype.add() Set.prototype.size

mySet.add(value)

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

参数值,必填,需要添加到Set对象中的元素的值

返回Set 对象本身

var mySet=new Set();

mySet.add(1) //{1}

mySet.add(2).add("2") //{1,2,"2"}可以链式使用,2个"2"集合视为不相等

mySet.size //3

Set.prototype.has()

has方法返回一个布尔值来判断Set对象中是否存在该值。

mySet.has(值)

参数值是必需的。

返回值是一个布尔值。

var mySet=new Set();

mySet.add("siva");

mySet.has("siva") //true

mySet.has("hello") //false

Set.prototype.delete()

delete() 方法可以从Set 对象中删除指定元素。

mySet.delete(值);

参数值,要删除的元素

返回值为布尔值,true表示删除成功。

var mySet=new Set();

mySet.add("siva");

mySet.delete("hello") //false

mySet.delete("siva") //true

mySet.has("siva") //假

mySet.size //0

Set.prototype.clear()

用于清除Set对象中的所有元素

mySet.clear()

var mySet=new Set()

mySet.add(1).add("1")

mySet.size //2

mySet.has("1") //true

mySet.clear();

mySet.size //0

遍历器

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

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

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

set.prototype.forEach() : 回调函数遍历

var mySet=new Set(["s","i","v"])

for(让我的mySet.keys()){

控制台.log(i)

}

//s

//我

//v

for(让我的mySet.values()){

控制台.log(i)

}

//s

//我

//v

for(让我的mySet.entries()){

控制台.log(i)

}

//["s","s"]

//["我","我"]

//["v","v"]

var otherSet=mySet.entries();

otherSet.next().value //["s","s"]

otherSet //{"i","v"}

otherSet.next().value //["i","i"]

otherSet //{"v"}

otherSet.next().value //["v","v"]

其他集//{}

mySet.entries(); //{"s", "i", "v"}

Set.prototype.forEach()

forEach 方法根据集合中元素的顺序为每个元素执行一次提供的回调函数。

mySet.forEach(回调[, thisArg])

已经被删除的元素不会被执行,但是undefined和null会被执行。

参数回调是一个函数,将为每个遍历的元素执行

回调中有三个参数,第一个是键值,第二个是键名,第三个是设置的对象

thisArg 执行回调时,this的指向

函数回调(值,键,设置){

console.log(值,键,设置)

}

new Set(["siva","hello",未定义,null]).forEach(回调)

//siva siva {"siva", "hello", undefined, null}

//你好你好{"siva", "hello", undefined, null}

//未定义未定义{"siva", "hello", undefined, null}

//null null {"siva", "hello", undefined, null}

Set的一些用法

let arr1=[1,2,3,4,5];

让arr2=[4,5,6,7,8];

让a=new Set(arr1);

let b=new Set(arr2) 数组去重并集

new Set([.arr1,arr2]) //{1,2,3,4,5,6,7,8}

let arr3=[.new Set([.arr1,arr2])] //[1,2,3,4,5,6,7,8] 交集

let arr3=new Set(arr1.filter(x=b.has(x))) //{4,5}差异集

let arr3=new Set(arr1.filter(x=!b.has(x))) //{1,2,3}

let arr4=new Set(arr2.filter(x=!a.has(x))) //{6,7,8}

[.arr3,arr4] //[1,2,3,6,7,8]

Weakset

WeakSet 对象允许你在集合中存储弱持有的对象,其中每个对象值只能出现一次。

没有size属性,WeakSet对象不能被遍历和枚举;只能存储对象,不能放置字符串、数字等数据类型。

好了,文章到这里就结束啦,如果本次分享的深入浅出:ES6中的Set数据结构应用详解和问题对您有所帮助,还望关注下本站哦!

用户评论

花海

终于可以摆脱了传统JS里重复值的痛了!

    有18位网友表示赞同!

败类

学习一下,想了解Set集合在这方面的优势。

    有19位网友表示赞同!

微信名字

感觉ES6真是越来越强大啦!

    有20位网友表示赞同!

清羽墨安

什么时候才能把所有新语法都学完呢?

    有8位网友表示赞同!

哥帅但不是蟋蟀

看了下资料,发现Set可以用来判断一个数组中的元素是否重复很方便。

    有11位网友表示赞同!

歇火

之前用过一些第三方库来处理重复值,现在可以用内置的Set更优雅了!

    有6位网友表示赞同!

强辩

这篇文章介绍的是什么情况啊?没太懂ES6是什么...

    有20位网友表示赞同!

浮光浅夏ζ

学习JavaScript新特性真的很有必要!

    有12位网友表示赞同!

别留遗憾

不知道Set在实际开发中的应用场景多吗?

    有5位网友表示赞同!

忘故

我主要是想了解如何使用Set来删除重复元素。

    有19位网友表示赞同!

话少情在

这篇文章的讲解是不是有点深入啊,能不能简单一点解释下?

    有9位网友表示赞同!

寒山远黛

感觉学习一套新的语法还挺费时间精力。。。

    有8位网友表示赞同!

我家的爱豆是怪比i

要好好学习一下,说不定有用的地方就在这里。

    有5位网友表示赞同!

微信名字

用Set来代替数组去存储数据,有什么优缺点吗?

    有7位网友表示赞同!

不忘初心

这篇文章看起来不错,我会认真阅读一下的!

    有18位网友表示赞同!

£烟消云散

希望这篇文章能够帮助我解决一些实际编程问题。

    有8位网友表示赞同!

玩味

要好好记录这种ES6新写法啊。

    有15位网友表示赞同!

封心锁爱

对Set的使用场景不太了解,期待这篇文章的讲解!

    有8位网友表示赞同!

風景綫つ

感觉学习新的语法总是很有成就感!

    有6位网友表示赞同!

呆萌

以前都不知道Set这个东西,现在有了专门的教程真是太好了!

    有8位网友表示赞同!

【深入浅出:ES6中的Set数据结构应用详解】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活

上一篇:《魔影紫光:筱原千绘原画集全彩番外篇(编号223)》 下一篇:《魔道祖师》现代文改编版:穿越时空的奇幻旅程