Set和Map
1.Set是一个类似数组的数据结构,成员的值都是唯一的,没有重复的值。
通过new Set()
来生成一个Set的数据结构。
var s = new Set();
打印之后会看到如下信息:
会看到拥有一个size
属性,来获取长度。同时会看到Set.prototype
拥有许多来操作set的方法:
add(value)
: 添加某个值,返回Set结构本身。clear()
: 清空set。delete(value)
: 删除某个值,返回true/false, true表示成功。has(value)
: 是否存在某个值,返回true/false, true表示存在。constructor
: 构造函数,默认是Set
函数。size
: 返回Set实例成员总数。keys()
:返回所有的键名,用于Set没有键名,其返回的是键值。values()
:返回所有的键值。entries()
: 返回键名和键值(键名==键值)。
var s = new Set();
s.add(1);
// Set {1}
s.add([1,2]);
// Set {1, [1, 2]}
s.add({name: 'ayguo'});
// Set {1, [1, 2], Object {name: "ayguo"}}
s.has(1);
// true
s.has(2);
// false
s.delete(1); // true
// Set {[1, 2], Object {name: "ayguo"}}
s.delete('a'); // false
// Set {[1, 2], Object {name: "ayguo"}}
// s.clear();
// Set {}
for(let item of s.values()){
console.log(item);
}
for(let item of s){
console.log(item);
}
s.forEach((value, key) => console.log(value));
console.log(s);
2.WeakSet结构和Set类似,也是不重复值的集合。与Set有两个区别。
首先,WeakSet的成员只能是对象,而不能是其他类型的值。
其次,WeakSet中的对象都是弱引用,其对象的改变不会反映到WeakSet上。
注意:是参数里面的成员成为WeakSet的成员,因此参数里面的成员需要是对象。
3.Map是一个新的数据结构,类似Object键值对的集合(hash结构)。与Object不同的是:Object的键只能是字符串,而Map的键可以是任意值。
属性和方法:
- size
: 获取Map实例的成员总数。
- set(key, value)
: 给Map设置值,如果存在则更新,返回Map结构。
- get(key)
: 获取对应键的值。
- has(key)
: 是否存在对应的成员。
- delete(key)
: 删除某个成员。
- clear()
: 清空成员。
- keys()
:获取所有的键。
- values()
:获取所有的值。
- entries()
和forEach()
:遍历Map。
var m = new Map();
var o = new Object();
m.set(1, 'hello');
// Map {1 => "hello"}
m.set(o, 'object');
// Map {1 => "hello", Object {} => "object"}
m.get(o);
// "object"
m.has(o);
// true
m.has(5);
// false
m.delete(1); // true
// Map {Object {} => "object"}
// m.clear();
// Map {}
for(let key of m.keys()){
console.log(key);
}
for(let val of m.values()){
console.log(val);
}
for(let item of m.entries()){
console.log(item);
}
m.forEach(function(val, key, map){
console.log(val, key);
});
[...m.keys()];
[...m.values()];
[...m.entries()];