ES6之set

LinMeng 等级 818 0 0
标签: 遍历前端
const s=new Set();
[2,3,4,2,3,4,5,6,2,3,3].forEach(x=>s.add(x))
console.log(s);
for(let i of s){
console.log(i)
}
console.log(s.add(9)); //add(value),添加某个值,返回Set结构本身
console.log(s.delete(2)); //删除某个值,返回一个布尔值,表示是否删除成功
console.log(s.has(2)); //返回一个布尔值,表示该值是否为set成员
console.log(s.clear()); //清楚所有成员,没有返回值
console.log(s);

//总结:ES6提供的新的数据结构Set.类似于数组,但是成员的值都是唯一的。set本身是一个构造函数,用来生成Set数据结构 //上面代码通过add()方法向Set结构加入成员,结果表明Set结构不会添加重复的值

// 去除数组重复成员
const list=[1,2,1,5,2,4,6,2,3,1,]
console.log([...new Set(list)]);
// 去除字符串里面的重复字符

const str='gdfgdgdgarwefgsfsdf';
console.log([...new Set(str)]) //["g", "d", "f", "a", "r", "w", "e", "s"]
console.log([...new Set(str)].join('')) //gdfarwes

//Object和Set在判断是否包含一个键上的写法不同

//对象的写法
const properties={
'weight':1,
'height':1
};
if(properties['weight']){
//......
}
//Set的写法
const properties1=new Set();
properties1.add('width')
properties1.add('height')
if(properties1.has('weight')){
//.....
}


//这又提供了一种数组去重的方法
function dedupe(array){
return Array.from(new Set(array))
}
dedupe([11,1,2,3,2,3,4,5,3])
//Array.from方法可以将Set结构转为数组
const items=new Set([1,2,3,4,5,4,3,2])
console.log(items); //Set结构是entries键值对
const array=Array.from(items)
console.log(array); [1,2,3,4,5]
// 遍历操作---四个
let set=new Set(['red','green','blue'])
for(let item of set.keys()){
console.log(item); //red green blue
}
for(let item of set.values()){
console.log(item); //red green blue
}
for(let item of set.entries()){
console.log(item); //(2) ["red", "red"] (2) ["green", "green"] (2) ["blue", "blue"]
}

// 总结---因为Set结构没有键名,只有键值,或者说键名和键值一样,所以keys和values方法的行为完全一致 // Set结构的实力默认可遍历,它的默认遍历器生成函数就是它的values方法

//forEach()
let aa=new Set([1,24,9])
set.forEach((value,key)=>console.log(key +':' +value))
//11
//24:24
//9:9

//遍历

// 拓展运算符(...)内部使用for...of 循环,所以也可以用于Set结构;map 和filter 也可间接用于Set
// 去除数组重复成员
const list1=[1,2,1,5,2,4,6,2,3,1,]
console.log([...new Set(list1)]);
//map 
let bb=new Set([1,2,3])
bb =new Set([...bb].map(x=>x*2))
console.log(bb); //返回Set结构
//filter
let cc=new Set([1,6,10])
cc= new Set([...cc].filter(x=>(x%2)==0))
console.log(cc);

//注意:向Set加入值得时候,不会发生类型转变,所以5和'5'是两个不同的值;

// Set内部判断两个值是否相同,使用的算法类似于全等于运算符,主要的区别是向Set加入值时认为NaN等于自身,而全等于不认为。 // 两个空对象也会被视为两个值

收藏
评论区

相关推荐

ES6之set
const snew Set(); 2,3,4,2,3,4,5,6,2,3,3.forEach(xs.add(x)) console.log(s); for(let i of s){ console.log(i) } console.log(s.add(9)); //add(value),添加某个值,返回Set结构本身 console.log(s.d
ES6 新增了哪些字符串处理方法
ES6 新增了哪些字符串处理方法 ================ 我们都知道在 ES6 之前,我们只能使用 indexOf 来判断字符串是否存在某个字符,现在 ES6 多出了几个比较常用的方法: * `includes()`:返回布尔值,判断是否找到参数字符串。 * `startsWith()`:返回布尔值,判断参数字符串是否在原字符
ES6中对字符串处理的优点
\[toc\] ### 1、字符的Unicode表示法 ES6之前 Unicode 只能表示 \\u0000 -- \\uFFFF 之间的字符。 ES6可以表示超过这个 范围的unicode字符 如 //原来 ES6 之前 "\uD842\uDFB7" // "𠮷" "\u20BB7" // " 7"
ES6学习笔记(3)
参考书《ECMAScript 6入门》 http://es6.ruanyifeng.com/ **字符串的扩展** ES6之前只能识别\\u0000 - \\uFFFF 之间的字符,超过此范围,识别会出错;ES6弥补了这个错误 ES6扩展的新方法 codePointAt----"𠮷".CodePointAt(0)//返回超过\\u00
ES6新特性整理,你需要了解的ES6知识
ES6是新版本JavaScript语言的标准,上一次标准的制订还是2009年出台的ES5。目前ES6的标准化工作已经完成,14年12月份放出了正式版本。 目前主流的浏览器都支持运行ES6代码,如果你的不支持,还等什么呢,换浏览器啊~ 潮流虽然太快,但我们不停下学习的步伐,就不会被潮流丢下的,下面来领略下ES6中新特性,一堵新生代JS的风采。 箭头操作符 =
ES6核心特性
**摘要:** 聊JS离不开ES6啊! * 原文:[ES6核心特性](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fgithub.com%2Fljianshu%2FBlog%2Fissues%2F10) * 作者:[ljianshu](https://www.oschina.ne
ES6知识点补充
前言 ECMAScript 6.0(简称ES6),作为下一代JavaScript的语言标准正式发布于2015 年 6 月,至今已经发布3年多了,但是因为蕴含的语法之广,完全消化需要一定的时间,这里我总结了部分ES6,以及ES6以后新语法的知识点,使用场景,希望对各位有所帮助 **本文讲着重是对ES6语法特性的补充,不会讲解一些API层面的语法,更多的是发
11个JavaScript小技巧
关注  Vue中文社区 ,回复“ 加群 ” 加入我们一起学习,天天进步 ![](https://oscimg.oschina.net/oscnet/20535851b07ebb14b96283d31d09b36425c.png) 译 者: 前端 小智 https://segmentfault.c
ECMA Script 6之 Map 与 Set
**Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。** ![ECMA Script 6之 Map 与 SetECMA Script 6之 Map 与 Set](https://www.linuxprobe.com/wp-content/uploads/2020/07/1-26.png) **Map 对象** Map 对象保
ES6——for
  for-in和for-of乍一听,以为是一样的,都是用来“遍历”的。但是,既然开发出了两个方法,那就一定有所区别 iterable ========   首先,ES6中添加了一个iterable类型,翻译过来叫“**可迭代**”。   在ES6里,**数组Arrray**、**集合Set**以及**Map**(目前我还不了解……)都是“可迭代的”
ES6基础之——__proto__
\_\_proto\_\_:前面两个下划线,后面两个下划线,ES6的\_\_proto\_\_可以的得到或者设置对象的prototype 使用\_\_proto\_\_可以直接在对象表达式里面设置prototype,例子: let breakfast = {   getDrink(){     return 'tea'
ES6对象的super关键字
super是es6新出的关键字,它既可以当作函数使用,也可以当作对象使用,两种使用方法不尽相同 1.super用作函数使用的时候,代表父类的构造函数,es6规定在**子类中使用this之前必须先执行一次super函数,**super相当于Father.prototype.constructor.call(this) class Father{
ES6的Set()方法实现数组去重
let arr=[1,1,2,5,2]; let s1=new Set(); s1.add(arr[0]); s1.add(arr[1]); s1.add(arr[2]); s1.add(arr[3]); s1.add(arr[4]); let arr1=[];
Redis学习笔记
这篇是接着上篇来的,所以标号就继续了~~~~ **四、set** 介绍: set集合元素是不重复的无序的。set类型与list类型有相似之处,如图: ![](http://static.oschina.net/uploads/space/2015/1212/170939_JldH_780876.png) 命令: ①sa
vue+iview兼容IE9以上的解决办法
1\. 支持ES6新语法,安装babel-polyfill ----------------------------- > IE不支持es6语法 * 安装 npm install --save babel-polyfill # 或者(下同) yarn add babel-polyfill * 修改webpac