ES6(ECMAScript 2015)引入了两个新的数据结构:Map和Set,这两个数据结构是用于存储和操作数据的高效工具。下面分别介绍一下它们的原理:

Map

Map是一种类似于对象的键值对数据结构,不同之处在于它的键可以是任意类型的,而不仅仅是字符串类型。Map内部使用了一种称为哈希表的数据结构,它能够快速的定位和存取数据。具体来说,Map将键值对存储在一个数组中,并使用哈希函数将键转换为数字索引,从而快速查找和存储值。

由于Map中的键可以是任意类型,因此它更加灵活,而且在处理大量数据时,Map比对象的性能更好。Map中的键是唯一的,因此同一个键只能对应一个值。

Map提供了以下常用方法:

  • set(key, value):将键值对添加到Map中。
  • get(key):根据键获取值。
  • has(key):判断Map中是否存在指定的键。
  • delete(key):删除指定键对应的键值对。
  • clear():清空Map中的所有键值对。
  • size:获取Map中键值对的数量。

应用示例:

1.用Map存储用户信息

可以用一个Map对象来存储用户的信息。Map的键可以是用户名,值可以是一个对象,包含用户的各种信息,如密码、邮箱、年龄等。

let users = new Map();
// 添加一个用户
let user = {
  password: "123456",
  email: "example@gmail.com",
  age: 20
};
let username = "john";
users.set(username, user);

Set

Set是一种集合数据结构,它是由一组唯一且无序的值组成。Set内部同样使用了哈希表来存储值,从而可以快速地进行添加、删除和查询操作。

Set提供了以下常用方法:

  • add(value):向Set中添加一个新的值。
  • has(value):判断Set中是否存在指定的值。
  • delete(value):删除指定的值。
  • clear():清空Set中的所有值。
  • size:获取Set中的值的数量。

与数组相比,Set中的值是唯一且无序的,因此在某些场景下,Set比数组更加高效和方便。例如,当需要去除数组中的重复元素时,可以将数组转换为Set,然后再将Set转换回数组。

应用示例

1.Set去重

Set的特性是存储唯一的值,可以用来去除数组中的重复元素。

let arr = [1, 2, 3, 3, 4, 5, 5];
let set = new Set(arr);
let uniqueArr = Array.from(set); // [1, 2, 3, 4, 5]

2.Set存储用户选择的选项

可以用一个Set对象来存储用户选择的选项。例如,在一个多选框中,当用户选择了某些选项时,就将这些选项添加到Set中。这样就可以快速地判断用户是否选择了某个选项。

let selectedOptions = new Set();
// 用户选择了选项2和选项3
selectedOptions.add(2);
selectedOptions.add(3);
console.log(selectedOptions.has(2)); // true
console.log(selectedOptions.has(1)); // false