ES6之set

LinMeng 等级 451 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的语法知识,后面又要慢慢开始
【Swift】Swift 2.0 到 Swift 3.0
问: 报错:The “Swift Language Version” (SWIFT\_VERSION) build setting must be set to a supported value for targets which use Swift. This setting can be set in the build settings editor
JS - ES6 的 Module
一、介绍 模块,(Module),是能够单独命名并独立地完成一定功能的程序语句的集合(即程序代码和数据结构的集合体)。 两个基本的特征:外部特征和内部特征 外部特征是指模块跟外部环境联系的接口(即其他模块或程序调用该模块的方式,包括有输入输出参数、引用的全局变量)和模块的功能 内部特征是指模块的内部环境具有的特点(即该模
Chrome 中 Set-Cookie SameSite 问题
关于 “Chrome 修改对未设置 SameSite 的 cookie,视作 SameSite:Lax 处理的变更” 的问题,目前看,最妥善的解决方案还是按照规矩办事儿,目前 Chrome 是行动最快的,而 FireFox 和 Edge 也在积极跟进,持支持态度。 影响范围: 如果你的项目中有如下跨域场景: 1. 跨域的 ajax
我的错误总结
使用redis时MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redi
ES6环境搭建及react-router学习
一、起因 ES6新纳入了很多振奋人心的新特性,真的很让人忍不住去尝试一下。不过,由于现在大部分的浏览器对ES6的支持程度都不是很好。所以如果想要放心地使用一些新特性,还需要用一些工具,将ES6或者ES7的代码转为ES5的代码。今天,就配置了一下环境
JavaScript 笛卡尔积算法,可用于商品 SKU 计算
代码示例:Demo 演示:jsfunction calcDescartes (array) { if (array.length < 2) return array0 || ; return .reduce.call(array, function (col, set) { var res ;
Node.js 如何处理 ES6 模块
Node.js 如何处理 ES6 模块作者: 日期: 学习 JavaScript 语言,你会发现它有两种格式的模块。一种是 ES6 模块,简称 ESM;另一种是 Node.js 专用的 CommonJS 模块,简称 CJS。这两种模块不兼容。很多人使用 Node.js,只会用require()加载模块,遇到 ES6
ES 家族新特性,闪亮登场!
前言前端学习永无止境,学习吧骚年 本文集合了 ES6 至 ES11 常用到的特性,包括还在规划的 ES12,只列举大概使用,详细介绍的话内容量将十分巨大.。PS:使用新特性需要使用最新版的 bable 就行转义 新特性ES6(2015) 1\. 类(class) class Man    constructor(name)      this.n
说说Python集合的那些事儿
大家好,我是IT共享者,人称皮皮。今天给大家来捋一捋Python集合。 一、什么是集合?集合(set)和字典(dict)类似,它是一组 key 的集合,但不存储 value。集合的特性就是:key 不能重复。 二、集合常用操作 1\. 创建集合set 的创建可以使用 也可以使用 set 函数:s1 'a', 'b', 'c', 'a', 'd', 'b'
计算机组成原理4.3CISC和RISC的基本概念
4.3.1复杂指令系统计算机CISC(Complex Instruction Set Computer) 4.3.1.1 CISC的简介全称Complex Instructions Set Computer,复杂指令系统计算机如X86架构的PC,台式电脑,采用“存储程序”的思想,即把一段基本的指令存储在某个地方,实现复杂指令时,可以采用已经存储的基本指令,这
ES6的解构赋值是深拷贝or浅拷贝?
面试时候有面试官问到ES6的解构赋值是深拷贝还是浅拷贝?,这里做一个总结.ES6的解构赋值,大家应该都清楚,就是可以快速取出数组或者对象中的值;我们先来看一个使用案例:更多的解构赋值知识可以查看:https://es6.ruanyifeng.com/docs/destructuring那么,ES6的解构赋值到底是深拷贝还是浅拷贝呢? 我们先来看一下深拷贝和浅
你所知道的JS变量作用域
变量的作用域,指的是变量在脚本代码中的可读、可写的有效范围,也就是脚本代码中可以使用这个变量的区域。在ES6之前,变量的作用域主要分为全局作用域、局部作用域(也称函数作用域)两种;在ES6及其之后,变量的作用域主要分为全局作用域、局部作用域、块级作用域这3种。相应作用域变量分别称为全局变量、局部变量、块级变量。全局变量声明在所有函数之外;局部变量是在函数体内
大厂Java初级开发工程师!!!面试必问项之Set实现类:TreeSet
一、TreeSet 概述 1、TreeSet 是 SortedSet 接口的实现类, TreeSet 可以确保集合元素处于排序状态。 2、TreeSet顾名思义他内部维护的是一个TreeMap,底层是红黑二叉树,他使得集合内都是有序的序列。   3、Tree 可以按照添加对象的指定属性,进行排序,所以向TreeSet中添加的数据,要求是相同类的对象。 4、两