ES6中Set和Map方法

本文深入探讨了JavaScript中Set和Map对象的功能与使用技巧,包括数组去重、集合操作如交集、并集和差集,以及Map的键值对管理和遍历。通过实例演示了如何利用这些数据结构提升代码效率。

1.Set

Set集合是一种无重复元素的列表

  • 声明一个set集合
let s = new Set();
let s1 = new Set([1,2,3,4,5]);
  • 求元素的个数
console.log(s1.size);
  • 添加元素
s1.add('55');
  • 删除元素
s1.delete(1);
  • 检测set集合中是否存在某个值,存在返回true,不存在返回false
console.log(s1.has('55'))
  • 清空元素
s1.clear();
  • 遍历
for(let v of s1){
      console.log(v);
    }
2.Set对象的作用
  1. 数组去重
    let arr = [1,2,3,4,5,4,3,2,1];
    // let result = new Set(arr) //不是一个数组,可以通过扩展运算符变成数组
    let result = [...new Set(arr)];
    console.log(result);
  1. 交集
let arr = [1,2,3,4,5,4,3,2,1];
let arr2 = [4,5,6,5,6];
let result = [...new Set(arr)].filter(item=>{
      let s2 = new Set(arr2); // 4,5,6
      if(s2.has(item)){
        return true;
      }else{
        return false;
      }
    })
console.log(result)
  1. 并集
let arr = [1,2,3,4,5,4,3,2,1];
let arr2 = [4,5,6,5,6];
let union = [...new Set([...arr,...arr2])];
console.log(union);
  1. 差集
let arr = [1,2,3,4,5,4,3,2,1];
let arr2 = [4,5,6,5,6];
let diff = [...new Set(arr)].filter(item=> !(new Set(arr2).has(item)))
console.log(diff);
3.Map

Map集合内含有多组键值对,集合中每个元素分别存放着可以访问的键名和它对应的值
键名的等价性是通过调用Object.is()方法实现的,所以数字5和字符串5会被识别为两种类型,可以分别作为独立的两个键出现在程序中。

  • 声明一个Map
let m = new Map();
  • 添加元素
m.set('name','galaxy');
m.set('change',function(){
     console.log('我们可以改变你')
   })
  • 获取元素的个数
console.log(m.size);
  • 删除元素
m.delete('name');
  • 获取元素
console.log(m.get('change'));
  • 清空Map
m.clear()
  • 遍历
 for(let v of m){
      console.log(v);
    }
### ES6Set Map 的使用教程 #### 关于 Set Set 是一种集合数据结构,其成员是唯一的且无序。这意味着在一个 Set 对象中不会存在两个相同的值。 创建一个新的 `Set` 可通过调用构造函数来实现: ```javascript let set = new Set(); set.add(1); set.add('string'); console.log(set.has(1)); // true ``` 对于已经存在的可迭代对象(比如数组),也可以直接传入到 `Set()` 构造器内初始化一个新集合作为参数[^2]。 关于 `Set` 实例的一些常用方法如下所示: - `.add(value)` 添加某个值作为新的条目; - `.delete(value)` 移除指定的条目; - `.has(value)` 判断是否存在某特定条目的布尔返回值; - `.clear()` 清空整个集合中的所有元素; 另外还有几个有用的属性方法用于获取当前集合大小以及遍历其中的内容,例如`.size`, `.entries()`, `.values()`, `.keys()` 等等[^3]。 #### 关于 Map Map 数据结构允许任何类型的键名而不仅仅是字符串或 Symbols 类型,并能保存键/值对关系。这使得它非常适合用来存储关联性的数据。 创建一个新的 `Map` 同样可以通过构造函数完成: ```javascript const map = new Map([ ['key1', 'value associated with key1'], ['key2', 'value associated with key2'] ]); ``` 上述代码片段展示了如何利用二维数组的形式一次性向映射表里添加多个键值对[^1]。 有关 `Map` 实例的操作还包括但不限于以下几个方面: - 获取键的数量:`map.size`; - 设置键对应的值:`map.set(key,value)`; - 查找给定键所对应之值:`map.get(key)`; - 删除指定键及其关联的数据项:`map.delete(key)`; - 测试是否含有某一键:`map.has(key)`; 值得注意的是,在某些情况下可能需要把 `Map` 转换成 JSON 格式的字符串以便在网络上传输或者持久化保存。此时可以先借助 `Object.fromEntries()` 函数将 `Map` 映射成普通的 JavaScript 对象再进一步处理[^4]: ```javascript // 将 Map 转换为 JSON 字符串的例子 const myMap = new Map([['name', 'Alice'], ['age', 18]]); const objFromMap = Object.fromEntries(myMap); const jsonString = JSON.stringify(objFromMap); console.log(jsonString); // {"name":"Alice","age":18} ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值