ES6中,Set和Map的区别 ?
在 ES6 中,Set 和 Map 都是新的集合数据结构,它们提供了存储唯一值和键值对的能力,但它们在设计目的和功能上有所不同。以下是 Set 和 Map 之间的主要区别:
-
用途:
- Set:主要用于存储唯一值集合。它的成员值都是唯一的,如果尝试向 Set 添加重复的值,它会自动忽略。
- Map:用于存储键值对,类似于 JavaScript 对象。Map 的每个“键”都是唯一的,但是“值”可以重复。
-
成员:
- Set:只有值,没有键。
- Map:有键(key)和值(value)。
-
迭代:
- Set:可以通过
values()
,keys()
, 和entries()
方法来迭代值、键或键值对。 - Map:同样可以通过
values()
,keys()
, 和entries()
方法来迭代值、键或键值对。
- Set:可以通过
-
键的类型:
- Set:只能存储原始值,如数字或字符串。
- Map:键可以是任何类型,包括函数、对象等。
-
操作方法:
- Set 提供了如
add()
,delete()
,has()
,clear()
, 和size
属性等基本操作。 - Map 提供了更多的操作方法,如
get()
,set()
,delete()
,has()
,clear()
,keys()
,values()
,entries()
, 和size
属性等。
- Set 提供了如
-
应用场景:
- Set 适用于需要保证唯一性的集合,例如存储用户名、唯一标识符等。
- Map 适用于需要存储关联数据的场景,例如缓存对象、将数据映射到另一个数据结构等。
以下是一个简单的示例,展示如何使用 Set 和 Map:
// Set 示例
let fruits = new Set(["apple", "banana", "apple"]); // "apple" 只会被添加一次
console.log(fruits.size); // 输出 2
// Map 示例
let fruitsMap = new Map([["apple", 1], ["banana", 2]]);
console.log(fruitsMap.get("apple")); // 输出 1
在这个例子中,fruits
是一个 Set,它只包含两个唯一的值 "apple"
和 "banana"
。而 fruitsMap
是一个 Map,它将 "apple"
映射到数字 1,将 "banana"
映射到数字 2。