ES6学习之路~~数据结构:set和map

TEC控制器芯片 ADN8835 中文数据手册 ADN8835是一款高集成度的单芯片TEC控制器。它包括线性电压调节模块脉冲宽度调制(PWM) 电压调节模块和两个零漂移、轨到轨斩波放大器。线性控制器和PWM驱动器用于控制H桥配置中的内部功率MOSFET。通过测量热传感器反馈电压,并使用集成的运算放大器作为比例-积分-微分(PID)补偿器来调理信号,ADN8835通过TEC驱动电流,将连接至TEC模块的激光二极管或无源组件的温度稳定到编程的目标温度。 阅读详情

ES6新的数据结构 — Set

  • Set类似于数组,但其成员是唯一的,没有重复值
    <!-- 申明Set -->
    var s = new Set();

    var arr = [1,3,2,3,2,3,2,3,4,5,6,4,5];
    arr.map(i => s.add(i)); // 调用s.add()方法给Set中添加值

    // 或者在声明时,直接添加添加一个数组作为参数
    var s1 = new Set(arr);

    console.log(s); // Set(6) {1,3,2,4,5,6, size: 6, ...}
    console.log([...s]); // [1,3,2,4,5,6]
  • Set判断值是否相等使用精确相等运算符
    var s2 = new Set([1,2,3,'2','a']);
    console.log([...s2]); // [1,2,3,'2','a']
  • Set的属性和方法:
    <!-- 属性 -->
    Set.prototype.constructor: 构造函数,默认是Set()
    Set.size: 返回set实例的长度

    <!-- 方法 -->
    add(value): 添加值,返回Set结构本身
    delete(value): 删除值,返回boolean
    has(value): 判断值是否存在,返回boolean
    clear(): 清空Set,无返回值
  • Set的遍历操作
    1. Set.keys()键名遍历器
    2. Set.Values()键值遍历器,由于Set类似于数组,没有键名,所以键值与键名遍历器返回结果一致
    3. Set.entries()键值对遍历器
    4. forEach((x) => console.log(x))回调函数遍历
    var s = new Set([1,2,3,'2','a']);

    for(let item of s.key()) {
        console.log(item);  // 1 , 2 , 3 , '2' , 'a'
    }
  • 由于扩展运算符…的内部实现也是for…of循环,所以…同样适用Set数据结构

有同学可能好奇WeakSet结构

  • WeakSet结构与Set类似,都不能有相同的值
  • 不同之处在于:
    1. WeakSet的成员只能为对象,而且不能是其他的任何类型
    2. WeakSet对对象的引用是弱引用,及某对象在其他地方已经不使用了(WeakSet中仍旧引用该对象),系统的垃圾回收机制不会考虑WeakSet,直接回收该对象
  • 由于以上两个不同,WeakSet是不可遍历的,也没有size属性
  • 使用WeakSet的好处是,可以防止内存泄漏

ES6新的数据结构 — Map

  • 玩过c/c++或java等语言的童鞋都应该知道map数据结构,存取数据都很方便。ES6以前,js要从一堆键值对中快速的取出某个键值对是要经过遍历或者转为对象的(取值也是通过遍历实现),并且对象的键一般只能使用字符串,在使用上有很大的限制
  • Map提供的不再是Object中的键值对,而是值-值对的存取
    var m = new Map();
    <!-- 用字符串做键 -->
    m.set(p, 'cont');

    m.get(p);   // cont

    m.has(p);   // true
    m.delete(p); // true
    m.has(p);   // false

    <!-- 用对象 -->

    var obj = {p: 'cont'};
    obj.p;      // cont

    m.set(obj, 'hello world!');
    m.get(obj);     // hello world!
  • Map 也接受一个保存 值-值 对的数组作为其参数
    var m = new Map([[a,'aaa'], [b, 'bbb']]);

    m.get(a);   // aaa
    m.get(b);   // bbb
  • 如果对同一个键赋值多次,后面的值覆盖前面的值
    var m = new Map([[a,'aaa'], [b, 'bbb']]);
    m.set(a,'ccc');

    m.get(a);   // ccc
  • Map的键引用的是一个地址,而不是像对象那样,引用的一个字符串。
    <!-- 这里先废话几句 -->
    var quote1 = ['a'];
    var quote2 = {v: 'a'};

    typeof quote1;  // "object"
    typeof quote2;  // "object"

    /**
    * js中的"object"类型数据是引用类型数据,一个object就会占用一块内存,即使相同的值也是占用不同的内存
    * 而其他的基础数据类型相同的值共用同一块内存
    */

    <!-- 进入正题 -->
    var m = new Map();

    // 键名为基本数据类型
    m.set(1, 'aaa');
    m.set(1, 'bbb');
    m.get(1);   // bbb

    // 键名为引用数据类型
    m.set(['a'], 'aaa');
    m.get(['a']);   // undefined, get的键 ['a'], 和 set的键 ['a'],指的不是同一块内存,因此拿不到前面的 'aaa'

    var k1 = ['a'];
    var k2 = ['a'];

    m.set(k1, 'aaa');
    m.set(k2, 'bbb');

    m.get(k1);  // aaa
    m.get(k2);  // bbb, k1和k2指向的地址不用,存储的值也就不同

Map的键为基础数据类型时,只要值相等,Map就会认为是同一个键;Map的键为引用数据类型时,就算长得一模一样,但因为引用的内存地址不一样,还是会被当做两个键
+ Map实例的属性和方法
1. size属性,返回map结构的成员总数
2. set(key,value)方法,设置Map的键值,返回整个Map结构
3. get(key)方法,返回key对应的键值
4. has(key)方法,返回一个布尔值,表示该键值是否存在
5. delete(key)方法,删除key对应的键值,返回一个布尔值
6. 遍历方法:keys()、values()、entries()、forEach()遍历器

    var m = new Map();
    m.set(1,'aaa').set(3,'ads').set('aaa',231)

    console.log(m.size);    // 3

    m.get(1);   // aaa

    console.log(m.has(3));    // true

    for(let key of m.keys()) {
        console.log(key);   // 1 , 3 , 'aaa'
    }

    for(let en of m.entries()) {
        console.log(en[0] + ': ' + en[1]);  // 1: 'aaa'   ,   3: 'ads'  ,  'aaa':231
    }
  1. Map转数组,使用object的 … 扩展运算符
    let mapToArr = [...m];
    console.log(mapToArr);  // [[1, "aaa"],[3, "ads"],["aaa", 231]]
  1. 数组转Map:将数组传入Map的构造函数即可
    let m1 = new Map(mapToArr);
    console.log(m1);    // Map(3) {1 => "aaa", 3 => "ads", "aaa" => 231}
  1. Map转对象(前提是Map的所有键都是字符串)采用循环遍历Map的键值存储到对象中,对象转Map同理

WeakMap

  • WeakMap与Map的结构和用法基本类似,唯一的区别在于它只接受对象作为键名(null除外)
  • WeakMap的键名是对象的弱引用,垃圾回收机制不将该引用考虑在内,当系统把对应的键值回收后,WeakMap自动删除该键值
    var vm = new WeakMap();
    var element = document.querySelector('.element');

    vm.set(element, "Original");
    vm.get(element);    // Original

    element.parentNode.removeChild(element);    // 删除节点,系统会回收element这个Dom节点对象
    element = null;
    vm.get(element);    // undefined, WeakMap自动删除了element这个成员
  • WeakMap典型应用就是用来记录Dom节点的状态,当DOM节点被删除回收时,WeakMap会自动删除该DOM节点对应的成员,释放内存
  • WeakMap的另一个应用就是部署内部私有属性,即键值引用另一个对象内的每个键或值或键值对,当该对象被删除,这个引用会被自动释放
Allegro172版本如何在联机模式下使用skill文件操作指导 注意:如果下次重新开启Symphony模式的时候可能导致symphony_skill中的文件内容被清空,所以最好将自己常用的skill文件都写到symphony_skill.txt中去,然后做好备份,需要的时候,在开启软件后把文件放到env目录中去。在用Allegeo172版本进行PCB设计的时候,有时会用到Symphony模式进行多人实时在线协同设计,如下图。这个模式设计起来可以提升设计速度,但是也有一个缺陷,就是不能使用skill文件。如下图,当调用skill的时候就会出现如下报错。 阅读详情

相关推荐

基于FPGA的函数信号发生器设计

设计采用波形查找表和相位累加器的方法实现DDS,查找表的数据位宽为8位,采样点数为4096。波形产生范围是100Hz-20MHz,最小频率间隔为1Hz,用8个数码管显示频率,可产生正弦波、方波、三角波,波形用两个led显示,select信号控制,全灭为正弦波,一亮一灭为方波,全亮为锯齿波。为了使频率和相位便于调节,用3个拨码开关控制步进,用8个led显示状态。

FPGA入门到跑路 5637

6. ES6学习路线

ES6学习路线 变量 let 和 const 变量的结构赋值 字符串的扩展 字符串的新增方法 正则的扩展 数组的扩展 函数的扩展 对象的扩展 对象的新增方法 运算符的扩展 Symbol Set 和 Map 数据结构 Proxy Reflect Promise 对象 Iterator 和 for…of 循环 Generator 函数语法 Generator 函数的异步应用 async 函数 Class 的基本语法 Class 的继承 Module 的语法 Module 的加载实现 编程风格 读懂规格 异步

SongGuoQ的博客 228

基因组研究之单倍型T2T基因组(一)

单倍型T2T基因组(Haplotype-resolved T2T genome)是一种高精度、高连续性、高完整性的基因组组装技术,它能够提供从端粒到端粒的完整基因组序列,包括所有的基因和非编码序列。完整覆盖:T2T基因组覆盖从端粒到端粒的染色体序列,包含所有的基因和非编码序列,包括以往难以解析的端粒和着丝粒区域。单倍型解析:单倍型T2T基因组能够区分来自父母本的遗传信息,进行亚基因组不对称演化研究,挖掘单倍型等位基因间的表达差异,这对于重测序、性状定位、进化、基因功能、基因编辑等研究至关重要。

2401_89507557的博客 2442

Nodejs Set和Map的使用

数据类型set 作用和数组类似,和数组不同的是:它不能存放重复的元素 应用场景:数组去重 eg01:基本使用 let set1 = new Set([10, 20, 30, 40, 10, 20, 30, 50]); console.log(set1); // Set(5) { 10, 20, 30, 40, 50 } eg02:数组去重 let arr = [10, 20, 30, 40, 10, 20, 30, 50]; let set = new Set(arr); console.

码小余の博客 7463

从原理图到PCB:Cadence Allegro 17.4网表同步全流程详解(含第三方网表配置)

本文详细解析了Cadence Allegro 17.4中从Orcad原理图到PCB布局的网表同步全流程。核心内容包括标准的第一方网表同步步骤,以及针对第三方网表导入时关键的封装库路径配置方法,并提供了常见同步错误的排查思路,帮助工程师高效、准确地完成设计数据传递,确保PCB设计顺利开局。

salt9的博客 657

HTTPDebugger实战:iTunes登录协议抓包与签名验证全解析

HTTPS抓包是分析客户端与服务端交互的重要手段,其原理是通过中间人证书解密TLS流量,从而观察请求与响应细节。在调试iTunes登录协议时,抓包能帮助我们定位签名验证失败、x-timestamp过期等棘手问题。然而,许多教程中常见的mumu模拟器抓包、fiddler手机抓包或charles抓包unknown问题,往往让新手陷入工具陷阱。本文以HTTPDebugger为切入点,从TLS握手到认证请求,系统拆解iTunes登录协议的关键字段与签名机制,覆盖证书配置、进程监听、域名过滤等实战经验,辅以Apple

weixin_30768881的博客 199

Node开发(四)Symbol、Set和Map

一、Symbol(了解) Symbol是ES6中新增的一种数据类型(原始数据类型) 常见的七种数据类型:number、string、boolean、null、undefined、Object、Symbol Symbol是一个独一无二的值 也就是说使用同一个代码产生的两个symbol类型也是不相同的 let s=Symbol(); console.log(s);//Symbol() let s1=Symbol(); console.log(s==s1);//false 两个值不想等 独一无二 Symb

weixin_43933148的博客 860

软件工程导论实践:从需求到架构的机票预订系统全流程解析

本文深入解析机票预订系统从需求分析到架构设计的全流程实践,涵盖业务流程、功能建模、模块化设计、性能优化等关键环节。通过实际项目经验,分享软件工程导论在复杂系统开发中的应用技巧,包括数据流图绘制、E-R图设计、微服务架构及高并发处理等实战策略,助力开发者构建高效可靠的机票预订系统。

weixin_29202213的博客 414

Node.js笔记------Map对象

Map对象用来保存键值对,并且能够记住键的原始插入顺序在Map对象中任何值(对象或者原始值)都可以作为一个键(任何数据类型)或一个值。一个Map对象在迭代时会根据对象中元素的插入顺序来进行 — 一个 for...of 循环在每次迭代后会返回一个形式为[key,value]的数组。所以说一定要知道顺序,这样在进行for...of迭代时,得到数组值的顺序就可以确定了。Set对象同理。

weixin_69270668的博客 6184

激光定位算法竞技场:hdl_localization与Cartographer/AMCL的横向技术解剖

本文深入对比了hdl_localization、Cartographer和AMCL三种激光定位算法的技术原理与性能表现。通过UKF-NDT融合、图优化和粒子滤波等核心技术,分析了各算法在结构化环境、动态环境和大尺度场景下的适应性。实验数据表明,Cartographer在全局一致性上表现最优,而AMCL在动态环境中更具鲁棒性。文章还提供了算法选型指南和参数调优技巧,为工程实践提供参考。

weixin_29062865的博客 367

数字电路逻辑与设计实验一 门电路逻辑功能及测试

(1)选二输入四异或门电路 74LS86,按图 1-8 接线,输入端 1、2、4、5 接逻辑开 关(S1~S4),输出端 A、B、Y 接电平显示发光二极管.用六反相器(非门)按图 1-11 接线,输入 80KHz 连续脉冲,用双踪示波器测输入, 输出相位差,计算每个门的平均传输延迟时间的 tpd 值。测试不同的输入组合:对门电路进行全面的测试,尝试不同的输入组合,包括各种可能的逻辑状态。检查门电路的输入:确认门电路的输入是否正确,并且输入信号的电平符合门电路的规格要求。确保输入信号的稳定性和准确性。

欢迎交流学习心得 2万+

ES6_01-ES6学习路线及简介

例如:第一章 Python 机器学习入门之pandas的使用根据《es6入门》分章节执行以下步骤: 1.听小马哥视频,手写结构笔记 → 2.看《es6入门》在线教程,勾画记录重难点,跟着教程敲代码→ 3.汇总整理形成线上笔记。......

qq_45599475的博客 383

QcarCamera-EVS HAL实现(一)

高通车载EVS实现

qq_37057338的博客 2379

ES6数组去重的三个简单办法

ES6数组去重的三个简单办法 简单说一下利用ES6实现数组去重的三个办法。 第一种: 利用Map对象和数组的filter方法 贴上相关代码 打印后的结果 通过打印我们发现,确实实现了我们想要的效果。那么下面简单来解释一下。 1.Map对象是ES6提供的一个新的数据结构,其中has的办法是返回一个布尔值,表示某个值是否存在当前的Mp对象之中,set的办法是给Map对象设置key/value。 2...

weixin_44526618的博客 8万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

[ES6] ES6的认识和语法

本篇简述了ES6,并且简单的介绍了ES6新特性,如let和const,增强的函数,结构赋值

qq_67548292的博客 157

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

JavaScript - ES6-试题-1

JavaScript 序言 ​ 整理一些 JavaScript 的相关知识,可能不是太全面,但欢迎补充~~!!! CodingStartup var、let、const 有什么区别? var 可以重复证明但会覆盖之前的重名变量、没有作用域特性,但拥有变量提的特性 var cool = 1 var cool = 2 ----------------------------------------------------------------------------------- for (var

qq_42876835的博客 398

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

本文介绍一些ES6的新语法可将代码化繁为简

废话不多说,直接上代码,看注释即可 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script> /* * ES6的一些好玩的东西 */ //1、ES6提供了新的数据结构Set let ar...

dasongbo7290的博客 154

2023我要吊打前端面试官(Es6 No.1)

🚀2023我要吊打前端面试官日记🚀🚀2023我要吊打前端面试官日记🚀吊打面试官🤠Es6系列第一天Created by Asen(阿胜)😎系列热更中💥~~

Asen-coder的博客 350

STL之set、map基本使用实例

set和map都是关联式容器,二者都对内部元素默认排序:升序。 set是key结构 , map是key-value结构; set可以去重 , map重载了[ ],查询速度快; set包含的基本方法: map的基本方法: 使用这些函数的实例: void test_set() { //set是 key结构的,是关联式容器,对插入的元素自动排序,默认是升序

CodingStart 1168

ES6/JavaScript一些‘巧用’

前言 第一次发表文章,如有不好的地方请见谅/ 在编写JavaScript代码的时候存在的一些方法和技巧,虽然有时候条条大路都通向罗马,但是也许总会有那么一条最短的路径可走。本文将一些都知道却不怎么用的小技巧分享给大家/ 一些小技巧 1.new Set() 数组的去重,在'潜意识'里面感觉就应该去循环然后对比去重,其实在ES6中新增提...

weixin_33737774的博客 105

Job-ES6 语法

*块级作用域,字符串,函数 *对象扩展,解构 *类,模块化 使用let 完全可以替换var ,使用var ,在{}之外是可以找到的,使用let在{}之外是找不到的. 模版字符串 name="imooc"; course = "React 开发 App" console.log("hello" + name + ",course is" + course) console.log(`hello

Kasekale的博客 346

JavaScript数据结构

一、几个要点 underscore.js Map Set 数组 二、使用介绍 1. underscore大法,函数式编程,短小精悍,简洁优雅 var _ = require('underscore'); _.each([1,2,3,4,5], function (n) { console.log(n); }); console.log(_.range(10)); cons...

stsfang 165

修炼js 3数据结构

这次我们来缕一缕Js的数据结构。 1、首先登场的是大家都比较熟悉的数组 接下来让我们先看看如何定义数组吧。 // 方式一 let arr1 = [];// 空数组 // 方式二 let arr2 = new Array(5);//创建长度为5的空数组,不写参数即 为没有长度的空数组 // 以上都是常见的写法,接下来是不太常见的写法 // 方式三 let arr3 = Array.of(1,2);//创建了一个长度为2数组并填充为1,2 // 方式四 let arr4 = Array(5).fill(3

scelmx的博客 251

树莓派双足机器人Microduck部署与回中位调试指南

双足机器人姿态控制的核心在于静态平衡建立,其技术基础是嵌入式系统中PWM精确输出、I²C传感器数据融合与闭环反馈校准。理解舵机中位脉宽的物理意义、加速度计姿态解算原理及树莓派硬件抽象层适配逻辑,是实现稳定站立的前提。Microduck项目揭示了从驱动加载、设备树配置到Makefile硬件映射的完整链路,尤其在树莓派4B/5平台差异下,I²C总线冲突、PWM时钟精度偏移和APT源兼容性成为高频故障点。本文聚焦‘回中位’这一关键动作,解析其背后的动态平衡建模、卡尔曼滤波参数调优与分阶段状态机设计,适用于开源机器

weixin_33857230的博客 186

JavaScript巧学巧用

(点击上方公众号,可快速关注)前言由于工作和生活上的一些变化,最近写文章的频率有点下降了,实在不好意思,不过相信不久就会慢慢恢复过来,感谢大家一直以来的关注和支持。本文主...

github_38314237的博客 152

JS中的数字数组去重

// 方法1: ES6中的Set数据结构法 function arrRemoval(array) { // let set = Array.from(new Set(array)); let set = [...new Set(array)]; return set; } //方法2:定义一个空的新数组,每次判断新数组中是否包含当前元素,如果不包含则添加 function arrRemoval(array) { let result = []; array.for..

zw_wen的博客 734
上一篇: Vuex怎么学(二)
下一篇: ES6学习之路~~Symbol:独一无二的值类型
EricLua
博客等级 码龄10年 34粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值