ES6 语法三(部分)

117 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

摘要

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);
}

image.png

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 的所有成员