Set是ES6提供的一种新的数据结构,允许存储任何类型的值, 类似于数组,但Set中的成员是唯一的, 没有重复值
let set = new Set();'运行
因为Set中的值是唯一的,需要判断两个值是否恒等。在此有几个特殊值需要特殊对待:
- console.log(+0 === -0); // true
- console.log(undefined === undefined); // true
- console.log(NaN === NaN); // false
'运行
向set对象中添加新的成员
- set.add('zzy');
- set.add('water')
- console.log(set); // Set(2) { 'zzy', 'water' }
注意: 使用add方法添加基本数据类型会自动去重,添加引用数据类型不会去重
- set.add('zzy');
- set.add('water')
- console.log(set); // Set(2) { 'zzy', 'water' }
- set.add([1]);
- console.log(set); // Set(3) { 'zzy', 'water', [ 1 ] }
- set.add('water')
- set.add([1]);
- // 使用add方法添加基本数据类型会自动去重
- // 添加引用数据类型不会去重
- console.log(set); // Set(4) { 'zzy', 'water', [ 1 ], [ 1 ] }
size
查看set的长度
console.log(set.size); // 2
delete
删除set对象中的成员
- set.delete('zzy');
- console.log(set); // Set(3) { 'water', [ 1 ], [ 1 ] }
has
判断有没有某个成员
set.has('hello'); // 返回布尔值true或者false
clear
清空set 无参无返回值
set.clear();
应用:数组去重
console.log(...new Set([1,22,22,3,4])); // 1 22 3 4'运行
keys():返回键名的遍历器。
values():返回键值的遍历器。entries():返回键值对的遍历器。forEach():使用回调函数遍历每个成员。
- // keys和 values是一样的
- console.log(set.keys()); // [Set Iterator] { 'water', [ 1 ], [ 1 ] }
- console.log(set.values()); // [Set Iterator] { 'water', [ 1 ], [ 1 ] }
- console.log(set.entries());
- // [Set Entries] {
- // [ 'water', 'water' ],
- // [ [ 1 ], [ 1 ] ],
- // [ [ 1 ], [ 1 ] ]
- // }
-
- let res = set.forEach((key,value,set)=>{
- console.log(key,value,set);
- })
- console.log(res);
- // water water Set(3) { 'water', [ 1 ], [ 1 ] }
- // [ 1 ] [ 1 ] Set(3) { 'water', [ 1 ], [ 1 ] }
- // [ 1 ] [ 1 ] Set(3) { 'water', [ 1 ], [ 1 ] }
Map是一种集合,类似于对象,是由键值对组成的数据结构。 键可以是任意数据类型
而对象的键只能是字符串或者symbol值。
let map = new Map();'运行
给map添加成员
- // 第一个参数是key值 第二个参数是value值
- map.set("yse","zzy")
- map.set([2],'hello')
- console.log(map); // Map(2) { 'yse' => 'zzy', [ 2 ] => 'hello' }
删除Map中的成员,
可以直接删除基本数据类型的键,删除引用数据类型需要删除引用地址
- map.delete("yse")
- console.log(map); // Map(1) { [ 2 ] => 'hello' }
获取成员
- map1.get([2])
- console.log(map1); // Map(1) { [ 2 ] => 'hello' }
- const arr = [[{'a': 1}, 111], ['b': 222]]
-
- const myMap = new Map(arr)
-
- [...myMap] // map转数组。 [[{'a': 1}, 111], ['b': 222]]
map与对象的互换- const obj = {}
- const map = new Map(['a', 111], ['b', 222])
- for(let [key,value] of map) {
- obj[key] = value
- }
- console.log(obj) // {a:111, b: 222}
注意:
JSON字符串要转换成Map可以先利用JSON.parse()转换成数组或者对象,然后再转换即可。