ES6 中的 Set 和 Map

在前端开发中,我们经常需要处理一些数据集合,比如数组、对象等。ES6 中新增了 Set 和 Map 两种数据结构,它们可以更加方便地管理数据,让我们的开发效率更高。

Set

Set 是一种类似于数组的数据结构,但是它的成员都是唯一的,没有重复的值。Set 可以用来去除数组中的重复项。

创建 Set

可以通过以下方式创建一个 Set:

const set = new Set([1, 2, 3]);
console.log(set); // Set {1, 2, 3}

也可以通过 add 方法向 Set 中添加元素:

const set = new Set();
set.add(1);
set.add(2);
set.add(3);
console.log(set); // Set {1, 2, 3}

Set 的方法

Set 有以下常用的方法:

  • add(value):向 Set 中添加一个值,返回 Set 对象本身。
  • delete(value):删除 Set 中指定的元素,返回一个布尔值,表示删除是否成功。
  • has(value):判断 Set 中是否存在指定元素,返回一个布尔值。
  • clear():清空 Set 中所有元素。
  • size:返回 Set 中元素的个数。

Set 的遍历

Set 可以使用 for...of 循环遍历:

const set = new Set([1, 2, 3]);
for (let item of set) {
  console.log(item);
}

另外,Set 还有以下方法可以遍历:

  • keys():返回一个包含 Set 中所有键的迭代器。
  • values():返回一个包含 Set 中所有值的迭代器。
  • entries():返回一个包含 Set 中所有键值对的迭代器。

Map

Map 是一种键值对的数据结构,它与对象的区别在于,Map 的键可以是任意类型,而对象的键只能是字符串或 Symbol 类型。

创建 Map

可以通过以下方式创建一个 Map:

const map = new Map([
  ['name', '张三'],
  ['age', 18]
]);
console.log(map); // Map(2) {"name" => "张三", "age" => 18}

也可以通过 set 方法向 Map 中添加元素:

const map = new Map();
map.set('name', '张三');
map.set('age', 18);
console.log(map); // Map(2) {"name" => "张三", "age" => 18}

Map 的方法

Map 有以下常用的方法:

  • set(key, value):向 Map 中添加一个键值对,返回 Map 对象本身。
  • get(key):获取 Map 中指定键的值,如果不存在则返回 undefined。
  • delete(key):删除 Map 中指定的键值对,返回一个布尔值,表示删除是否成功。
  • has(key):判断 Map 中是否存在指定键,返回一个布尔值。
  • clear():清空 Map 中所有键值对。
  • size:返回 Map 中键值对的个数。

Map 的遍历

Map 可以使用 for...of 循环遍历:

const map = new Map([
  ['name', '张三'],
  ['age', 18]
]);
for (let item of map) {
  console.log(item);
}

另外,Map 还有以下方法可以遍历:

  • keys():返回一个包含 Map 中所有键的迭代器。
  • values():返回一个包含 Map 中所有值的迭代器。
  • entries():返回一个包含 Map 中所有键值对的迭代器。

总结

Set 和 Map 是 ES6 中新增的数据结构,它们可以更加方便地管理数据。Set 可以用来去除数组中的重复项,而 Map 则是一种键值对的数据结构。在实际开发中,我们可以根据实际需要选择使用哪种数据结构。

示例代码:

// Set
const arr = [1, 2, 2, 3, 3, 3];
const set = new Set(arr);
console.log(set); // Set {1, 2, 3}

// Map
const map = new Map([
  ['name', '张三'],
  ['age', 18]
]);
console.log(map.get('name')); // 张三

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6588d02aeb4cecbf2ddf1c7b


纠错
反馈