ES6中的set、map
set
- set类似于数组,但是它的值都是唯一的。
- set可以接受一个数组或者具有interable接口的数据作为参数。
- 向set数据加入NaN时,会被认为是同一个数据,虽然NaN是自己不等于自己的但是在set中是默认相等的。
set的某些属性和操作方法
const newSet = new set([1,'d']);
//set的属性
newSet.size() //1 相当于数组的长度length
//set的数组操作方法
newSet.add(2) // 往set中添加数组 类似数组的push,因为add()之后会返回newSet所以可以进行链式调用
newSet.add(5).add(6);
newSet.delete(1) // 删除方法 返回布尔值代表是否删除成功
newSet.has(1) //判断set数据中是否包含某值 返回布尔值代表是否包含
newSet.clear() //清除数据 无返回值
set的循环
有四种循环
Set.prototype.keys():返回键名的遍历器
Set.prototype.values():返回键值的遍历器
Set.prototype.entries():返回键值对的遍历器
Set.prototype.forEach():使用回调函数遍历每个成员
和object的方法有点类似,keys方法、values方法、entries方法返回的都是遍历器对象。由于 Set 结构没有键名,只有键值(或者说键名和键值是同一个值),所以keys方法和values方法的行为完全一致。
let set = new Set(['red', 'green', 'blue']);
for (let item of set.keys()) {
console.log(item);
}
// red
// green
// blue
for (let item of set.values()) {
console.log(item);
}
// red
// green
// blue
for (let item of set.entries()) {
console.log(item);
}
// ["red", "red"]
// ["green", "green"]
// ["blue", "blue"]
Map
键值对的集合,事实上,不仅仅是数组,任何具有 Iterator 接口、且每个成员都是一个双元素的数组的数据结构,都可以当作Map构造函数的参数。这就是说,Set和Map都可以用来生成新的 Map。
如果对同一个键进行赋值,后面的值会覆盖前面的值。
const set = new Set([
['foo', 1],
['bar', 2]
]);
const m1 = new Map(set);
m1.get('foo') // 1
const m2 = new Map([['baz', 3]]);
const m3 = new Map(m2);
m3.get('baz') // 3
map的一些属性和方法
const map = new Map();
map.set('foo', true);// 通过set设置值,同样是支持链式调用的
map.size() // 能查看长度
map.clear()// 清除 无返回值
map.get('foo') // 查看值 返回查询到的值
map.has('foo') // 是否包含某个值 返回布尔值
map.delete('foo') // 删除 返回布尔值是否删除成功
map的循环
Map.prototype.keys():返回键名的遍历器。
Map.prototype.values():返回键值的遍历器。
Map.prototype.entries():返回所有成员的遍历器。
Map.prototype.forEach():遍历 Map 的所有成员。
const map = new Map([
['F', 'no'],
['T', 'yes'],
]);
for (let key of map.keys()) {
console.log(key);
}
// "F"
// "T"
for (let value of map.values()) {
console.log(value);
}
// "no"
// "yes"
for (let item of map.entries()) {
console.log(item[0], item[1]);
}
// "F" "no"
// "T" "yes"
// 或者
for (let [key, value] of map.entries()) {
console.log(key, value);
}
// "F" "no"
// "T" "yes"
// 等同于使用map.entries()
for (let [key, value] of map) {
console.log(key, value);
}
// "F" "no"
// "T" "yes"
还有其它强大功能 如map和json和数组相互转换等可以参考下面文档
参考文档