ES6+新特性-Symbol与Set/Map数据结构

简介: ES6 引入了三种新的数据结构:Symbol、Set和Map。Symbol是唯一且不可变的值,常用于定义对象的独特属性;Set存储不重复值,适合数组去重;Map则是键值对集合,键可为任意类型,提供了更灵活的存储方式。这些新数据结构提供了更高效的操作手段,分别解决了属性命名冲突、数据去重和复杂键值对存储的问题。示例展示了如何使用Symbol、Set和Map进行基本操作。

Symbol 是 ECMAScript 6 中新增的一种数据类型,代表一个独一无二且不可变的值。它可以用作对象的属性名,用于定义独有的对象属性。

Set 是 ES6 中新增的一种数据结构,它类似于数组,但是成员的值都是唯一的,没有重复值。Set 的一个主要应用是用于数组去重。

Map 也是 ES6 中新增的一种数据结构,它类似于对象,但是键可以是任意类型,包括基本类型、对象、函数等。Map 是一种有序的键值对集合,可以通过键取得对应的值。

Symbol、Set 和 Map 都是 ES6 中新增的数据结构,它们都可以用于解决特定的问题。

Symbol 用于定义对象的独有属性,以避免属性名的重复问题。

Set 用于去除数组中的重复元素,可以快速地判断一个元素是否在集合中。

Map 则提供了一种更灵活的键值对存储方式,可以使用任意类型的键,更加适用于一些特殊的场景。

总的来说,Symbol、Set 和 Map 都是为了提供更灵活、更高效的数据操作方式而引入的,它们在各自的场景中都有独特的作用。

下面是一个使用Symbol、Set和Map的简单示例:

// 创建一个Symbol
const symbol1 = Symbol();
// 在对象中使用Symbol作为属性名
const obj = {
  [symbol1]: 'symbol value'
};
console.log(obj[symbol1]); // 输出:symbol value
// 创建一个Set
const set = new Set();
// 添加值到Set中
set.add('value1');
set.add('value2');
set.add('value3');
console.log(set.has('value1')); // 输出:true
console.log(set.size); // 输出:3
// 创建一个Map
const map = new Map();
// 添加键值对到Map中
map.set('key1', 'value1');
map.set('key2', 'value2');
map.set('key3', 'value3');
console.log(map.get('key1')); // 输出:value1
console.log(map.size); // 输出:3

image.gif

在上面的示例中,我们首先创建了一个Symbol,并将其作为对象属性名使用。然后我们创建了一个Set,并向其中添加了几个值,然后通过has方法检查某个值是否存在,通过size属性获取Set的大小。最后,我们创建了一个Map,并向其中添加了几个键值对,然后通过get方法获取某个键对应的值,通过size属性获取Map的大小。

相关文章
|
2月前
|
存储 缓存 JavaScript
Set和Map有什么区别?
Set和Map有什么区别?
237 1
|
3月前
|
存储 JavaScript 前端开发
for...of循环在遍历Set和Map时的注意事项有哪些?
for...of循环在遍历Set和Map时的注意事项有哪些?
97 0
|
3月前
|
存储 C++ 容器
unordered_set、unordered_multiset、unordered_map、unordered_multimap的介绍及使用
unordered_set是不按特定顺序存储键值的关联式容器,其允许通过键值快速的索引到对应的元素。在unordered_set中,元素的值同时也是唯一地标识它的key。在内部,unordered_set中的元素没有按照任何特定的顺序排序,为了能在常数范围内找到指定的key,unordered_set将相同哈希值的键值放在相同的桶中。unordered_set容器通过key访问单个元素要比set快,但它通常在遍历元素子集的范围迭代方面效率较低。它的迭代器至少是前向迭代器。前向迭代器的特性。
175 0
|
3月前
|
编译器 C++ 容器
用一棵红黑树同时封装出map和set
再完成上面的代码后,我们的底层代码已经完成了,这时候已经是一个底层STL的红黑树了,已经已符合库里面的要求了,这时候我们是需要给他穿上对应的“衣服”,比如穿上set的“衣服”,那么这个穿上set的“衣服”,那么他就符合库里面set的要求了,同样map一样,这时候我们就需要实现set与map了。因此,上层容器map需要向底层红黑树提供一个仿函数,用于获取T当中的键值Key,这样一来,当底层红黑树当中需要比较两个结点的键值时,就可以通过这个仿函数来获取T当中的键值了。我们就可以使用仿函数了。
42 0
|
3月前
|
存储 编译器 容器
set、map、multiset、multimap的介绍及使用以及区别,注意事项
set是按照一定次序存储元素的容器,使用set的迭代器遍历set中的元素,可以得到有序序列。set当中存储元素的value都是唯一的,不可以重复,因此可以使用set进行去重。set默认是升序的,但是其内部默认不是按照大于比较,而是按照小于比较。set中的元素不能被修改,因为set在底层是用二叉搜索树来实现的,若是对二叉搜索树当中某个结点的值进行了修改,那么这棵树将不再是二叉搜索树。
189 0
|
JavaScript 前端开发
ES6:什么是Symbol?
ES6:什么是Symbol?
178 1
|
JavaScript 前端开发
|
JavaScript 前端开发 开发者