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()转换成数组或者对象,然后再转换即可。