Set集合

Set集合是什么
  • Set对象是值的集合,可以按照插入的顺序迭代它的元素。

  • Set集合中的元素只会出现一次,即 Set集合中的元素是唯一的,没有重复的值。

  • Set本身是一个构造函数,用来生成 Set 数据结构。

const arr = [1,2,3,3,4,5,2]
let set = new Set(arr)
console.log(set);// Set {1,2,3,4,5}
// console.log(Set.prototype);// Set {}

NaN. undefined等值允许被存储在Set集合中

NaN值在Set集合中被认为是相等的

let set1 = new Set([NaN,NaN,undefined,undefined,null,null])
console.log(set1);// Set { NaN,undefined,null }console.log(undefined === undefined);//true
  • set集合中存储复杂数据类型(数组、对象及函数等)

    • 空数组和空对象表示多个值
    • 多个函数依旧也表示多个值
console.log([] === []);// false
console.log({} === {});// false
let set2 = new Set([[],[],{},{},function () {},function () {}])
console.log(set2);// Set { [], [], {}, {}, [Function], [Function] }
Set集合的属性与方法
属性
属性名称 描述
constructor 构造函数,默认就是Set函数
size 返回Set对象的值的个数。
let set = new Set([1,2,3,4,5])// set的size属性相当于数组中的length属性
console.log(set.size);// 5
操作方法
方法名称 描述
add(value) 添加某个值,返回 Set 结构本身
delete(value) 删除某个值(不是索引值),返回一个布尔值,表示删除是否成功
has(value) 返回一个布尔值,表示该值是否为Set的成员
clear() 清除所有成员,没有返回值
/*add (value) -向Set集合的结尾添加新的元素*返回值 – 添加新元素后的Set集合*/
set.add(6)
console.log(set);// Set { 1, 2, 3, 4, 5, 6 }/*delete(value) - 从set集合删除指定元素*value - 表示Set集合中的元素内容(值)*返回值 - 布尔值,true表示删除成功,false表示删除失败*/
set.delete(1)
console.log(set);// Set { 2, 3, 4, 5, 6 }/*has (value) - 判断指定Set集合中是否包含指定元素*value - 表示Set集合中的元素内容(值)*返回值 - 布尔值,true表示包含,false表示不包含*/
var result = set.has(4)
console.log(result);// true// clear() - 清空所有成员
set.clear()
console.log(set);// Set {}
遍历方法
方法名称 描述
values() 返回一个新的迭代器对象,该对象包含 Set集合中的按插入顺序排列的所有元素的值
keys() 与values0方法相同
entries() 返回一个新的迭代器对象,该对象包含Set集合中的按插入顺序排列的所有元素的值的[value, value]数组
forEach() 按照插入顺序,为 Set 集合中的每一个元素调用一次callback函数
  • values() - 返回的当前set集合中所有值的迭代器对象
  • keys() - 返回的当前set集舍中所有键的迭代器对象
  • entries() - 返回的当前Set集合中所有键值的迭代器对象
let set = new Set([1,2,3,4,5]);
/*values()方法 - 返回一个迭代器对象(SetIterator)*没有length属性值 – 常规的循环语句无法使用*不能for...in循环语句*只能使用for...of进行循环*/
// console.log(set.values());// [Set Iterator] { 1, 2, 3, 4, 5 }
var iterator = set.values()
for(var name of iterator){console.log(name);
}/*虽然set集合具有size属性–表示当前set集合中元素的个数但是Set集合获取每一个元素内容,不能使用set[索引值]的方式
*/
for (let i=0; i<set.size; i++) {console.log(set[i]);
}/*set集合提供的遍历的方法* values() - 返回的当前set集合中所有值的迭代器对象* keys() - 返回的当前set集舍中所有键的迭代器对象* entries() - 返回的当前Set集合中所有键值的迭代器对象* Set集合的特殊 - set集合中键与值相同*/
console.log(set.entries());// [Set Entries] { [ 1, 1 ], [ 2, 2 ], [ 3, 3 ], [ 4, 4 ], [ 5, 5 ] }
  • set集合提供forEach()方法

    • 作用 ― 用于遍历当前的Set集台(为Set集合中每个元素调用callback函数)

    • 回调函数 – function (value,key,set){}

      • value - 表示当前Set集合中每一个值
      • key - 表示当前Set集合中每一个键
      • 表示当前Set集合中每一个键
      • set - 表示当前遍历的Set集合
set.forEach(function (value,key,set) {console.log(value, key, set);
})
/*
1 1 Set { 1, 2, 3, 4, 5 }
2 2 Set { 1, 2, 3, 4, 5 }
3 3 Set { 1, 2, 3, 4, 5 }
4 4 Set { 1, 2, 3, 4, 5 }
5 5 Set { 1, 2, 3, 4, 5 }*/
Set集合与Array对比
  • 数组中用于判断元素是否存在的indexOf()函数效率低下。

  • Set 对象允许根据值删除元素,而数组中必须使用基于下标的 splice()方法。

  • 数组的 indexOf()方法无法找到NaN值。

  • Set对象存储不重复的值,所以不需要手动处理包含重复值的情况。

WeakSet集合

WeakSet是什么

WeakSet对象是一些对象值的集合,并且其中的每个对象值都只能出现一次。

WeakSet 对象与Set 对象的区别主要有两点:

Set WeakSet
存放对象引用和值 只能存放对象引用,不能存放值
对象是值的集合 对象都是弱引用,没有枚举和遍历迭代
//weakset集合只能存储对象,存储的对象无法被枚举
var ws = new WeakSet()
var obj1 = {name :'张无忌'
}
var obj2 ={name :'周芷若'
}
ws.add(obj1).add(obj2);
console.log(ws);// WeakSet { <items unknown> }
WeakSet集合的方法
方法名称 描述
add(value) 在WeakSet 集合尾部添加一个元素,返回该WeakSet 对象
delete(value) 从 WeakSet集合删除指定的元素。返回布尔值,表示是否删除成功
has(value) 检索WeakSet 集合是否包含指定的元素。返回布尔值,表示是否包含
clear() 清除WeakSet集合中所有元素,没有返回值

Map集合

Map集合是什么
  • Map集合是键值对的集合。

  • 任何值都可以作为Map集合中的键或值。

  • Map 集合可以按照插入的顺序迭代它的元素。

Map集合的属性与方法
属性
  • size - 返回 Map 结构的成员总数。
方法
方法名称 描述
set(key, value) 设置Map对象中键的值。返回该 Map 对象
get(key) 返回键对应的值。如果不存在,则返回undefined
delete(key) 从Map 集合删除指定的键值对。返回布尔值,表示是否删除成功
has(key) 检索Map 集合是否包含指定键对应的值。返回布尔值,表示是否包含
clear() 清除 Map集合中所有键值对,没有返回值
values() 返回一个新的迭代器对象,该对象包含 Map集合中所有元素的值
keys() 与values()方法相同
entries() 返回一个新的迭代器对象,该对象包含Map 集合中的按插入顺序排列的所有元素的值的[key, value]数组
forEach() 按照插入顺序,为Map 集合中的每一个元素调用一次callback函数
//创建Map集合-空集合
let map = new Map();
let num = 100,str ='张无忌', fun = function(){},obj = {}map.set('num', num);
map.set('str', str);
map.set('fun', fun);
map.set('obj',obj);console.log(map);console.log(map.get('str'));//张无忌map.delete('num')
console.log(map);//Map { 'str' => '张无忌', 'fun' => [Function: fun], 'obj' => {} }var result = map.has('str')
console.log(result);// true/*
map.clear()
console.log(map);// Map {}*/console.log(map.values());// [Map Iterator] { '张无忌', [Function: fun], {} }
console.log(map.keys());// [Map Iterator] { 'str', 'fun', 'obj' }
Map集合键的相等

Map集合的键的比较是基于“SameValueZero”算法:

  • 判断使用与===相似的规则。

  • -0和+0相等。

  • NaN 与自身相等(与===有所不同)。

Map集合与Object对比

一般情况下,Object 会被用于将字符串类型映射到数值。Object 允许设置键值对、根据键获取值、删除键、检测某个键是否存在。而 Map具有更多的优势:

  • Object 的键均为String 类型,在 Map里键可以是任意类型。

  • 必须手动计算 Object 的尺寸,但是可以很容易地获取使用Map的尺寸。

  • Map 的遍历遵循元素的插入顺序。

  • Object有原型,所以映射中有一些缺省的键。

WeakMap集合

WeakMap集合是什么

用于生成键值对的集合

它的必须是对象类型,可以是任意类型

不可枚举

WeakMap集合的方法
方法名称 描述
set(key, value) 设置WeakMap 对象中键的值。返回该WeakMap对象
get(key) 返回键对应的值。如果不存在,则返回undefined
delete(key) 从WeakMap 集合删除指定的键值对。返回布尔值,表示是否删除成功
has(key) 检索WeakMap集合是否包含指定键对应的值。返回布尔值,表示是否包含

[ES6] 细化ES6之 -- 键值对集合相关推荐

  1. 【Redis】Redis 哈希 Hash 键值对集合操作 ( 哈希 Hash 键值对集合简介 | 查询操作 | 增加操作 | 修改操作 )

    文章目录 一.哈希 Hash 键值对集合 二.查询操作 1.Redis 中查询 Hash 键值对数据 2.查询 Hash 键是否存在 3.查询 Hash 中所有的键 Field 4.查询 Hash 中 ...

  2. [ES6] 细化ES6之 -- 迭代器与生成器

    Symbol Symbol是什么 ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值 Symbol 值通过Symbol函数生成 let symbol = Symbol(); consol ...

  3. 集合与泛型集合与键值对集合

    1,集合 (Connections) ArrayList arr = new ArrayList();//可以add arr.Add("Hello girls!");//支持添加o ...

  4. 红黑树 键值_Java集合框架:红黑树概念、插入及旋转操作详细解读就问你会不会...

    初识TreeMap 之前的文章讲解了两种Map,分别是HashMap与LinkedHashMap,它们保证了以O(1)的时间复杂度进行增.删.改.查,从存储角度考虑,这两种数据结构是非常优秀的.另外, ...

  5. [ES6] 细化ES6之 -- 数组的扩展

    扩展运算符 扩展运算符 扩展运算符(spread)是三个点(...).它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列.允许一个表达式在原地展开 // 定义一个数组 var arr ...

  6. [ES6] 细化ES6之 -- 变量的解构赋值

    变量的解构赋值 解构赋值是什么 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值 var/let [变量名称1,变量名称2,...] = 数组或对象 本质上,这种写法属于"模式 ...

  7. [ES6] 细化ES6之 -- Class关键字

    类的声明 类是什么 类作为对象的模板,只是一个语法糖 class 关键字是让对象原型的写法更加清晰.更像面向对象编程的语法而已. // ES5创建构造函数 function Hero() {this. ...

  8. [ES6] 细化ES6之 -- 对象的扩展

    对象的属性 属性表示法 ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法 ES5 let name = "张无忌"; function sayMe() {cons ...

  9. [ES6] 细化ES6之 -- 函数的扩展

    函数参数的默认值 函数参数指定状认值 ES6 之前,不能直接为函数的参数指定默认值,如果定义了形参,不传递实参时导致形参为undefined,只能采用变通的方法. //ES5 function fn( ...

最新文章

  1. 谷歌力作:神经网络训练中的Batch依赖性很烦?那就消了它!
  2. COMP0037 Coursework Investigating Path Planning Algorithms
  3. 【Java 虚拟机原理】Class 字节码二进制文件分析 五 ( 方法计数器 | 方法表 | 访问标志 | 方法名称索引 | 方法返回值类型 | 方法属性数量 | 方法属性表 )
  4. 解决Matlab Help文档需要登录才能查看的问题
  5. 使用关键字SCAN ABAP-SOURCE对ABAP源代码进行语法扫描
  6. 特征工程之自动特征生成(自动特征衍生)工具Featuretools介绍
  7. 时间序列模型matlab_平稳时间序列分析01---AR模型
  8. Android 系统蓝牙 控制手机端音乐暂停 (AVRCP)
  9. 感觉所有的方法都有人做了,NLPer怎么找创新点?
  10. [SDOI 2015] 星际战争
  11. InnoDB下SQL执行底层原理和redolog、binlog
  12. Linux 云服务器aircrack-ng后台跑包并用邮件发送结果
  13. ■ 直接调用阿里云视频点播API实现视频播放
  14. 老九学堂 学习C++ 第六天
  15. 【图神经网络】图数据和图数据相关任务
  16. 推荐四款非常好用的免费音乐播放器
  17. 引入超融合技术解决虚拟机性能不足问题
  18. SOI技术及产业发展研究
  19. TCP/IP详解:TCP——超时和重传
  20. spring-security(二十五)鉴权

热门文章

  1. 静态路由配置_10 路由器间的静态路由及OSPF路由配置
  2. python中concat的用法_python pandas concat用法及代码示例
  3. Win10 20H2正式发布,对比旧版新功能一览
  4. android layout 层次感,FrameLayout的层次问题
  5. 【转】js版的俄罗斯方块!!
  6. phantomjs搭建输出js渲染后的html接口
  7. HDU 1011 Starship Troopers 树形+背包dp
  8. 内联元素,取消间隙和默认效果
  9. python 开源数据抓取框架scrapy
  10. ubuntu12的程序问题