ES6新特性梳理系列丨新的数据结构S

ES6新特性梳理系列文章将在本号持续发布,一起查漏补缺学个痛快!若您有遇到其它相关问题,非常欢迎在评论中留言讨论,达到帮助更多人的目的。若感本文对您有所帮助请点个赞吧!JavaScript与ECMAScriptJavaScript诞生于年,设计者是就职于Netscape公司的工程师BrendanEich。它是一门仅用10天就完成设计的编程语言,但至今为止已对业界保持26年的影响,且势头愈发强劲年Netscape将JavaScript提交给ECMA,希望它可以成为“标准化一个通用的、跨平台的、中立于厂商的脚本语言的语法和语义标准”,年ECMA确定将JavaScript作为浏览器脚本语言的标准,并为之重命名为ECMAScript,所以通常来讲我们将ECMAScript视为JavaScript的标准,而JavaScript则是ECMAScript的实现及扩展

年-年连续发布了ES1-ES3发布,年开始酝酿新版本的升级内容,中间因标准委员会意见未能达成一致,只做了部分功能的小范围升级及支持,于年12月发布了过渡版ECMAScript5.0,年6月发布ECMAScript5.1并成为ISO国际标准

年3月ECMAScript6草案冻结,年12月ECMAScript草案发布,年6月ECMAScript6正式通过,成为新的国际标准。ES6泛指自年升级为ECMAScript6.0后的所有子版本,如:ES-ES,等同于ES6.0-ES6.5,这是JavaScript走向企业级编程语言的强势升级

不断升级的标准与实现,对于开发效率及产品质量起到强有力的支撑,接下来我们开始梳理ES6的新特性吧!

什么是SetSet是ES6引入的新的数据结构,类似数组,但Set中成员的值是唯一的,不存在重复的值。创建一个Set通过newSet(),可以创建一个Set对象

vars=newSet()typeofs//Objectconsole.log(s)//[ObjectSet]Set()函数也可以接收一个数组,或者类似数组的对象作为参数

vars=newSet([1,2,3,1,2,4])console.log(s)//[ObjectSet]console.log(...s)//关于...扩展运算符参考本系列ES6新特性梳理系列丨变量的解构赋值Set的属性和方法Set.prototype.constructor:构造函数,默认就是Set函数Set.prototype.size:返回Set实例的成员总数add(value):添加某个值,返回添加后的Set实例delete(value):删除某个值,返回一个布尔值,表示是否删除成功has(value):查看当前set中是否包含指定值,返回一个布尔值clear():清除所有成员,没有返回值

vars=newSet()s.add(1).add(2).add(3).add(2)console.log(..s)//s.has(1)//trues.has(2)//trues.has(4)//falses.delete(1)s.has(1)//falses.clear()console.log(s)//[objectSet]console.log(...s)//空Array.from方法可以将一个Set结构转换为一个数组

vars=newSet([1,2,3])vararr=Array.from(s)console.log(arr)//Array[1,2,3]console.log(arr.length)//3console.log(arr.size)//undefined所以,我们可以根据这个方法和Set的唯一性,对数组的重复成员可以很方便的去重。

console.log(Array.from(newSet([1,2,3,4,2,4])))//Array[1,2,3,4]Set的遍历keys():返回键名的遍历器values():返回键值的遍历器entries():返回键值对的遍历器forEach():使用回调函数遍历每个成员由于Set结构没有键名,只有键值(或者说键名和键值是同一个值),所以keys()方法和values()方法的行为完全一致。注意,这里key()、value()、entries()方法返回的都是遍历器对象。

vars=newSet([hehe,haha,xixi])for(letiofs.keys()){console.log(i)}//hehe//haha//xixifor(letiofs.values()){console.log(i)}//hehe//haha//xixifor(letiofs.entries()){console.log(i)}//[hehe:hehe]//[haha:haha]//[xixi:xixi]

又由于Set实例默认就是可遍历的,它的默认遍历器生成函数就是它的values方法。所以我们遍历的时候,可以省略values()方法,直接用for...of循环遍历Set。

至于什么是可遍历的解构,我们将在下一部分详细介绍。这里只为了展示Set结构的遍历特性。

Set.prototype[Symbol.iterator]===Set.prototype.values//truevars=newSet([hehe,haha,xixi])for(letiofs){//注意,这里并没有values()console.log(i)}//hehe//haha//xixi

我们还可以通过forEach()来对Set结构进行遍历操作。

lets=newSet([1,2,3]);s.forEach((value,key)=console.log(value+10))//

此外,因为扩展运算符(...)内部使用for...of循环,所以我们还可以通过扩展运算符对Set结构进行遍历操作。

lets=newSet([haha,xixi,hehe]);console.log(...s);//"haha""xixi""hehe"

Set的实战小技巧

//下面是快速去除数组重复元素letarr=[1,3,4,2,1,2,3]console.log(...newSet(arr))//letarr1=[1,2,3]letarr2=[2,3,4]lets1=newSet(arr1)lets2=newSet(arr2)//快速合并两个数组并去除重复元素(并集)console.log(...newSet([...s1,...s2]))////快速实现两个数组的差集letresult=newSet([...s1].filter(x=!s2.has(x)))console.log(...result)//1//快速实现两个数组的交集letresult=newSet([...s1].filter(x=s2.has(x)))console.log(...result)//23ES6新特性梳理系列文章将在本号持续发布,一起查漏补缺学个痛快!若您有遇到其它相关问题,非常欢迎在评论中留言讨论,达到帮助更多人的目的。若感本文对您有所帮助请点个赞吧!叶阳辉HFun前端攻城狮往期精彩:

ES6新特性梳理系列丨Var+Let+Const的区别与作用域

ES6新特性梳理系列丨变量的解构赋值

ES6新特性梳理系列丨Symbol-新的数据类型

预览时标签不可点收录于话题#个上一篇下一篇


转载请注明:http://www.92nongye.com/zyjs/zyjs/204624199.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了