Set
类似于数组,但是成员的值是唯一的,没有重复的值
创建实例
- Set本身是一个构造函数,用来生成Set数据结构
var set = new Set();
- Set函数可以接受一个数组(或类似数组的对象)作为参数,用来初始化。
var set = new Set([1,2,3,4,1,2,3,4]);
set // Set(4){1,2,3,4}
// 注意,不可以使用set[index]来获取值;
- 向Set添加值的时候,不会发生类型转换
var set = new Set();
set.add(1);
set.add("1");
set // Set(2){1,"1"}
- Set 内部的 NaN 是相等的
var set = new Set();
set.add(NaN);
set.add(NaN);
set // Set(1){NaN}
- Set 内部的 对象总是不等的
var set = new Set();
set.add({});
set.add({});
set // Set(2){{},{}}
Set实例的属性
- Set.prototype.constructor: 构造函数,默认就是Set函数
- Set.prototype.size; 返回Set实例的成员总数;
Set实例的方法
add(value)
:添加某个值(末尾添加),返回Set结构本身。delete(value)
:删除某个值,返回一个布尔值,表示删除是否成功。has(value)
:返回一个布尔值,表示该值是否为Set
的成员。clear()
:清除所有成员,没有返回值。
var set = new Set();
set.add(1); //Set(1) {1}
set.has(1); //true
set.has(2) //false
set.delete(1) //true
set.clear() // 无返回值
- keys():返回键名的遍历器
- values():返回键值的遍历器
- entries():返回键值对的遍历器
- forEach():使用回调函数遍历每个成员
// 由于set没有键名,只有键值,所以keys、values、entries 返回的都一样;
let set = new Set();
set.add(1);
set.add(2);
set.keys(); // SetIterator {1, 2}
set.values(); // SetIterator {1, 2}
set.entries(); // SetIterator {1, 2}
// foreach();
// key和value 相等;
set.forEach((value,key) =>
console.log("value:" + value +",key:" + key));
value:1,key:1
value:2,key:2
Set和Array转换
- 使用Array.from;
var set = new Set();
var array = Array.from(set) // set变成了数组;
- 使用扩展运算符(…)
var array = [...new Set([1,2])] // array 是一个数组;
Map
类似于对象,是键值对的集合,但是键的范围不限于字符串,各种类型的值(包括对象)都可以当作键,也就是说,Object结构提供了“字符串—值”的对应,Map结构提供了“值—值”的对应
- 不重复的键值,新添加的键值会覆盖原值;
Map实例的属性
- size 返回map的的长度;
Map实例的方法
- set (key, value) 保存值
- get (key) 查找某个键,成功返回值,失败返回undefind;
- has (key) 查找某个键,成功返回true,失败返回false;
- delete (key) 删除某个键,成功返回true,失败返回false;
- clear () 清除所有成员,没有返回值
Map原生提供三个遍历器生成函数和一个遍历方法。
- keys():返回键名的遍历器。
- values():返回键值的遍历器。
- entries():返回所有成员的遍历器。
- forEach():遍历Map的所有成员。
let map = new Map();
map.set("one",1);
map.set("two",2);
// 只有键
map.keys() // MapIterator {"one", "two"}
// 只有值
map.values() // MapIterator {1, 2}
// 有键和值
map.entries() // MapIterator {"one" => 1, "two" => 2}
// 先拿到value 再拿到key 还有一个[Object map]数值;
map.forEach((value, key) =>
console.log(key + " " + value));
// one 1
// two 2
Map和数组类型转换
let map = new Map();
map.set("one",1);
map.set("two",2);
// Map转数组
let array = [...map];
array // [["one",1], ["two",2]];
let array = [...map.values()];
array // [1, 2];
// 数组转Map
array = [["one",1], ["two",2]];
let map1 = new Map(array);
array = [["one",1,3], ["two",2,4]];
let map2 = new Map(array);
map1 = map2;