当前位置:   article > 正文

ES6 之 Set 与 Map 数据结构要点总结(一)

ES6 之 Set 与 Map 数据结构要点总结(一)

Set 数据结构

Set 对象允许你存储任何类型的唯一值,无论是原始值还是对象引用。

特性:

  • 所有值都是唯一的,没有重复。
  • 值的顺序是根据添加的顺序确定的。
  • 可以使用迭代器遍历 Set。

常用方法:
1. add(value):添加一个新值到 Set。
2. delete(value):从 Set 中移除一个值。
3. has(value):检查 Set 是否包含某个值。
4. clear():移除 Set 中的所有值。
5. size:返回 Set 中的元素数量

示例:

let set = new Set();

// 添加值
set.add(1);
set.add("hello");
set.add({ name: "Alice" });

// 检查值是否存在
console.log(set.has(1)); // 输出:true
console.log(set.has("hello")); // 输出:true
console.log(set.has(2)); // 输出:false

// 删除值
set.delete(1);
console.log(set.has(1)); // 输出:false

// 遍历 Set
for (let item of set) {
    console.log(item);
}

// 清空 Set
set.clear();
console.log(set.size); // 输出:0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

Map 数据结构

Map 对象保存键值对的集合,其中键和值可以是任意类型。

特性:

  • 任何值(对象或原始值)都可以作为键或值。
  • 保持键的顺序,按照元素的插入顺序进行迭代。
  • 比对象更适合用作某些类型的键(如对象或函数)。

常用方法:

  1. set(key, value):将键和值存入 Map。
  2. get(key):根据键获取值。
  3. has(key):检查 Map 是否包含某个键。
  4. delete(key):根据键删除键值对。
  5. clear():移除 Map 中的所有键值对。
  6. size:返回 Map 中的元素数量。

示例:

let map = new Map();

// 添加键值对
map.set("key1", "value1");
map.set(1, "number");
map.set({ name: "Bob" }, "object");

// 通过键获取值
console.log(map.get("key1")); // 输出:value1
console.log(map.get(1)); // 输出:number

// 检查键是否存在
console.log(map.has("key1")); // 输出:true
console.log(map.has(2)); // 输出:false

// 删除键值对
map.delete(1);
console.log(map.has(1)); // 输出:false

// 遍历 Map
for (let [key, value] of map) {
    console.log(`${key}: ${value}`);
}

// 清空 Map
map.clear();
console.log(map.size); // 输出:0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

扩展特性:

  • WeakSet 和 WeakMap:类似于 Set 和 Map,但是它们存储的键是弱引用,这意味着它们不会被垃圾回收机制考虑,如果外部没有对这些键的引用,它们会被自动回收。
    WeakSet 代码示例:
let weakSet = new WeakSet();

let obj = {};
weakSet.add(obj);

// 由于obj是唯一的,WeakSet不能添加重复的对象
console.log(weakSet.has(obj)); // 输出:true

// 当obj没有被其他地方引用时,它会被垃圾回收
obj = null;
// weakSet中的obj也会被自动移除
console.log(weakSet.has(obj)); // 输出:false
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

WeakMap 代码示例:

let weakMap = new WeakMap();

let keyObj = {};
weakMap.set(keyObj, "value");

// 获取与键相关联的值
console.log(weakMap.get(keyObj)); // 输出:value

// WeakMap中的键是弱引用,当keyObj没有被其他地方引用时,它会被垃圾回收
keyObj = null;
// weakMap中的键值对也会被自动移除
console.log(weakMap.get(keyObj)); // 输出:undefined
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

Set 和 Map 提供了现代的、高效的数据结构,适用于需要快速查找、添加和删除操作的场景。使用这些数据结构可以编写出更简洁、更高效的代码。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/803079
推荐阅读
相关标签
  

闽ICP备14008679号