在JavaScript中,Set和Map是两种常用的数据结构,它们提供了一种方便的方式来存储和操作数据。本文将介绍Set和Map的作用、特点以及运用场景。
Set是一种集合数据结构,只能存储唯一的值,即不允许重复。以下是Set的特点和常用方法:
特点:
常用方法:
add(value)
: 向Set中添加一个新的值。delete(value)
: 从Set中删除指定的值。has(value)
: 检查Set中是否存在指定的值。clear()
: 清空Set中的所有值。size
: 返回Set中的元素个数。应用场景:
示例代码:
const set = new Set();
set.add(1);
set.add(2);
set.add(3);
set.add(2); // 添加重复元素,但不会生效
console.log(set); // 输出: Set { 1, 2, 3 }
console.log(set.has(2)); // 输出: true
console.log(set.size); // 输出: 3
set.delete(2);
console.log(set); // 输出: Set { 1, 3 }
set.clear();
console.log(set); // 输出: Set {}
下面是已有数组情况下如何去重:
方法一,使用扩展运算符 ...
和 Set 数据结构:
let arr = [1, 1, 2, 2, 3];
let newArr = [...new Set(arr)];
console.log(newArr); // 输出: [1, 2, 3]
方法二,使用 Array.from()
方法和 Set 数据结构:
let arr = [1, 1, 2, 2, 3];
// 创建一个 Set 对象
let set = new Set(arr);
// 将 Set 对象转换为数组
let newArr = Array.from(set);
console.log(newArr); // 输出: [1, 2, 3]
Array.from()
方法提供了一种简洁的方式来将可迭代对象或类数组对象转换为数组,并且可以通过传入回调函数进行进一步的映射处理。
for...of
循环遍历 Set 中的元素:let set = new Set([1, 2, 3]);
for (let value of set.values()) {
console.log(value);
}
// 输出:
// 1
// 2
// 3
forEach()
方法遍历 Set 中的元素:let set = new Set([1, 2, 3]);
set.forEach((value, key, set) => {
console.log(value, key, set);
})
// 输出:
// 1 1 Set(3) { 1, 2, 3 }
// 2 2 Set(3) { 1, 2, 3 }
// 3 3 Set(3) { 1, 2, 3 }
entries()
方法遍历 Set 中的元素:entries()
方法用于返回键值对的迭代器let set = new Set([1, 2, 3]);
for (const item of set.entries()) {
console.log(item);
}
// 输出:
// [1, 1]
// [2, 2]
// [3, 3]
Map是一种键值对的集合,可以使用任意类型的值作为键。以下是Map的特点和常用方法:
特点:
常用方法:
set(key, value)
: 向Map中添加一个键值对。get(key)
: 根据键获取对应的值。has(key)
: 检查Map中是否存在指定的键。delete(key)
: 从Map中删除指定的键值对。clear()
: 清空Map中的所有键值对。size
: 返回Map中的键值对个数。应用场景:
示例代码:
const map = new Map();
map.set('name', '小明');
map.set('age', 18);
console.log(map); // 输出: Map { 'name' => '小明', 'age' => 18}
console.log(map.get('age')); // 输出: 25
console.log(map.size); // 输出: 3
map.delete('age');
console.log(map); // 输出: Map { 'name' => '小明'}
map.clear();
console.log(map); // 输出: Map {}
Map 的遍历方法:
for...of
循环遍历 Map 中的键值对:const map = new Map([
['key1', 'value1'],
['key2', 'value2'],
['key3', 'value3']
]);
for (const [key, value] of map) {
console.log(key, value);
}
// 输出:
// key1 value1
// key2 value2
// key3 value3
forEach()
方法遍历 Map 中的键值对:const map = new Map([
['key1', 'value1'],
['key2', 'value2'],
['key3', 'value3']
]);
map.forEach((value, key) => {
console.log(key, value);
});
// 输出:
// key1 value1
// key2 value2
// key3 value3
entries()
方法遍历Map中的键值对:const map = new Map([
['key1', 'value1'],
['key2', 'value2'],
['key3', 'value3']
]);
for (const item of map.entries()) {
console.log(item);
}
// 输出:
// ['key1', 'value1']
// ['key2', 'value2']
// ['key3', 'value3']
注意:在遍历 Map 时,回调函数的参数顺序是先 value,后 key。
结论: Set和Map是JavaScript中常用的数据结构,它们分别提供了存储唯一值和键值对的机制。根据具体的需求,选择合适的数据结构可以简化数据操作并提高效率。熟练掌握Set和Map的使用方法,将有助于开发出更强大、高效的JavaScript程序。