在前端开发中,我们经常需要存储和读取数据。在 ECMAScript 2017 中,新增了 Map 和 Set 数据结构,可以更加方便地解决数据存储与读取问题。
Map 数据结构
Map 是一种键值对的集合,其中键和值可以是任意类型的数据。它类似于对象,但是支持更加灵活的键值对,例如可以使用对象作为键值对的键。
创建 Map
可以使用 new Map() 来创建一个空的 Map,也可以在创建时传入一个数组,数组中每个元素都是一个键值对数组。例如:
const map1 = new Map(); const map2 = new Map([[1, 'one'], [2, 'two'], [3, 'three']]);
Map 的基本操作
Map 的基本操作包括增加、删除、修改和查询键值对。
增加键值对
可以使用 set(key, value) 方法来增加一个键值对,例如:
const map = new Map();
map.set('name', 'Lucy');
map.set('age', 18);删除键值对
可以使用 delete(key) 方法来删除一个键值对,例如:
const map = new Map([[1, 'one'], [2, 'two'], [3, 'three']]); map.delete(2);
修改键值对
可以直接使用 set(key, value) 方法来修改一个键值对,例如:
const map = new Map([[1, 'one'], [2, 'two'], [3, 'three']]); map.set(2, 'new two');
查询键值对
可以使用 get(key) 方法来查询一个键对应的值,例如:
const map = new Map([[1, 'one'], [2, 'two'], [3, 'three']]); const value = map.get(2);
Map 的遍历
Map 提供了多种遍历方式,包括 keys()、values()、entries() 和 forEach()。
遍历键
可以使用 keys() 方法来遍历所有的键,例如:
const map = new Map([[1, 'one'], [2, 'two'], [3, 'three']]);
for (const key of map.keys()) {
console.log(key);
}遍历值
可以使用 values() 方法来遍历所有的值,例如:
const map = new Map([[1, 'one'], [2, 'two'], [3, 'three']]);
for (const value of map.values()) {
console.log(value);
}遍历键值对
可以使用 entries() 方法来遍历所有的键值对,例如:
const map = new Map([[1, 'one'], [2, 'two'], [3, 'three']]);
for (const [key, value] of map.entries()) {
console.log(key, value);
}遍历 Map
可以使用 forEach(callback) 方法来遍历所有的键值对,例如:
const map = new Map([[1, 'one'], [2, 'two'], [3, 'three']]);
map.forEach((value, key) => {
console.log(key, value);
});Set 数据结构
Set 是一种不重复的集合,其中每个元素都是唯一的。它类似于数组,但是不支持重复元素。
创建 Set
可以使用 new Set() 来创建一个空的 Set,也可以在创建时传入一个数组,数组中每个元素都是一个唯一的值。例如:
const set1 = new Set(); const set2 = new Set([1, 2, 3]);
Set 的基本操作
Set 的基本操作包括增加、删除和查询元素。
增加元素
可以使用 add(value) 方法来增加一个元素,例如:
const set = new Set(); set.add(1); set.add(2);
删除元素
可以使用 delete(value) 方法来删除一个元素,例如:
const set = new Set([1, 2, 3]); set.delete(2);
查询元素
可以使用 has(value) 方法来查询一个元素是否存在,例如:
const set = new Set([1, 2, 3]); const hasTwo = set.has(2);
Set 的遍历
Set 提供了多种遍历方式,包括 values()、entries() 和 forEach()。
遍历值
可以使用 values() 方法来遍历所有的值,例如:
const set = new Set([1, 2, 3]);
for (const value of set.values()) {
console.log(value);
}遍历元素
可以使用 entries() 方法来遍历所有的元素,例如:
const set = new Set([1, 2, 3]);
for (const [value, key] of set.entries()) {
console.log(value, key);
}遍历 Set
可以使用 forEach(callback) 方法来遍历所有的元素,例如:
const set = new Set([1, 2, 3]);
set.forEach((value) => {
console.log(value);
});示例代码
以下是一个使用 Map 和 Set 解决数据存储与读取问题的示例代码:
// www.javascriptcn.com code example
const data = [
{ id: 1, name: 'Lucy' },
{ id: 2, name: 'Mary' },
{ id: 3, name: 'Tom' },
];
// 使用 Map 存储数据
const map = new Map();
data.forEach((item) => {
map.set(item.id, item);
});
// 查询数据
const lucy = map.get(1);
console.log(lucy);
// 使用 Set 存储数据
const set = new Set();
data.forEach((item) => {
set.add(item.name);
});
// 查询数据
const hasLucy = set.has('Lucy');
console.log(hasLucy);以上代码中,首先使用 Map 存储了数据,然后可以使用 get(key) 方法来查询指定键对应的值。然后使用 Set 存储了数据,然后可以使用 has(value) 方法来查询指定元素是否存在。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d23a06a941bf713443dbac