小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
摘要
ES6 是 ECMAScript 6.0 的简称,是 JavaScript 语言的下一代标准。ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的一种实现。
Set 和 Map 数据结构
Set
Set 是 ES6 提供的新的数据结构,类似数组,成员值是唯一的,没有重复的值。
const s = new Set([1, 2, 3, 5, 4, 5])
console.log([...s]) // [1, 2, 3, 5, 4]
应用场景:
// 去除数组的重复成员
[...new Set(['a', 'b', 'b', 'b', 'c', 'e', 'd', 'e'])]
// 去除字符串里重复的字符
[...new Set('ababbc112dc')].join('')
另一种去除数组重复成员的方法:
Array.from 可以将 Set 结构转为数组
function dedupe(array) {
return Array.from(new Set(array))
}
dedupe(['a', 'b', 'b', 'b', 'c', 'e', 'd', 'e']) // ['a', 'b', 'c', 'e', 'd']
Set 实例的属性
Set.prototype.constructor:构造函数,默认是Set函数Set.prototype.size:返回Set的成员总数
Set 实例的操作方法
Set.prototype.add(value):添加某个值,返回 Set 结构本身;Set.prototype.delete(value):删除某个值,返回布尔值,表示删除是否成功;Set.prototype.has(value):返回布尔值,表示该值是否为 Set 成员;Set.prototype.clear():清除所有成员,无返回值;
Set 实例的遍历方法
Set.prototype.keys():返回键名的遍历器Set.prototype.values():返回键值的遍历器Set.prototype.entries():返回键值对的遍历器Set.prototype.forEach():使用回调函数遍历每个成员
let set = new Set([1, 2, 3, 2, 2, 4]);
for (let item of set.keys()) {
console.log('键名:', item);
}
for (let item of set.values()) {
console.log('键值:',item);
}
for (let item of set.entries()) {
console.log('键值对:',item);
}
Map
Map 是为了解决传统上只能用字符串当作键的 ES6 的新的数据结构,与 JavaScript 的对象(Object)一样,本质上是键值对的集合,但是“键”的范围不限于字符串,各种类型的值都可以当作键
应用场景:
Map 实例的属性
size:返回Map结构的成员总数
const map = new Map();
map.set('foo', true);
map.set('bar', false);
console.log(map.size) // 2
Map 实例的操作方法
Map.prototype.set(key, value):设置键和值,返回整个Map结构
const m = new Map();
m.set('a', 6) // 键是字符串
m.set(2, 'standard') // 键是数值
// 链式写法
let map = new Map()
.set(1, 'a')
.set(2, 'b')
.set(3, 'c');
-
Map.prototype.get(key):读取 key 的键值,如果找不到 key,返回 undefined -
Map.prototype.has(key):返回布尔值,表示某个键是否在当前 Map 对象中 -
Map.prototype.delete(key):删除某个键,返回布尔值,如果删除失败,返回 false -
Map.prototype.clear():清除所有成员,没有返回值
Map 实例的遍历方法
Map.prototype.keys():返回键名的遍历器Map.prototype.values():返回键值的遍历器Map.prototype.entries():返回所有成员的遍历器Map.prototype.forEach():遍历 Map 的所有成员