后盾人JS -- Map与WeakMap类型在JavaScript中的使用

Map类型特点与创建方法

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><script>let map = new Map()map.set("name","后盾人")map.set(function(){},"hdcms")map.set(1,"sina.com.cn")//这些类型都可以作为键console.log(map)let map2 = new Map(["hdcms","开源系统"],["houdunren"],"在线教程") //也支持链式操作map.set("name","sina").set("site","向军")</script>
</body>
</html>

Map类型增删改查操作

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><script>let obj = {name:"后盾人"}let map = new Map()map.set(obj,"houdunren")console.log(map.get(obj))console.log(map.has(obj))map.clear()       //全部删除console.log(map.delete(obj))console.log(map)</script>
</body>
</html>

遍历Map类型数据

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><script>let hd = new Map(["后盾人","houdunren"],["hdcms","开源系统"])console.log(hd.keys())console.log(hd.values())console.log(hd.entries())for(const key of hd.keys()){console.log(key)}for(const [key,value] of hd.entries()){console.log(key,value)}hd.forEach((value,key)=>{console.log(value,key)})</script>
</body>
</html>

Map类型转换操作

在使用for of的时候默认就是使用可迭代对象

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><script>let hd = new Map([["houdunren","后盾人"],["hdcms","开源系统"]])console.log(...hd)let newArr = [...hd].filter(item=>{return item[1].includes("后盾人")})console.log(newArr)</script>
</body>
</html>

Map类型管理DOM节点

使用map管理DOM节点就不怕覆盖了

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div name="后盾人">houdunren.com</div><div name="开源内容管理系统">hdcms.com</div><script>let map = new Map()document.querySelectorAll('div').forEach(item=>{map.set(item,{content:item.getAttribute("name")})})map.forEach((config,elem)=>{elem.addEventListener("click",()=>{alert(config.content)})})</script>
</body>
</html>

使用Map类型控制网站表单提交

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><form action="" onsubmit="return post()">接收协议:<input type="checkbox" name="agreement" error="请接受协议">我是学生:<input type="checkbox" name="student" error="网站只对学生开放"><input type="submit"></form><script>function post() {let map = new Map();let inputs = document.querySelectorAll("[error]");// 收集所有有 error 属性的输入框和对应的错误信息inputs.forEach(item => {map.set(item, {error: item.getAttribute("error"),status: item.checked});});// 检查每个输入框是否选中,如果没有选中就弹出错误提示let isValid = [...map].every(([elem, config]) => {if (!config.status) {alert(config.error); // 如果没有选中,弹出错误提示}return config.status; // 只有当状态为 true 时才继续表单提交});console.log(map); // 输出所有输入框的状态和错误信息return isValid; // 如果所有条件都满足,才允许提交表单}</script>
</body>
</html>


WeakMap的语法使用

Weakmap和Weakset有点相似,里面只能有对象

value和keys都用不了(因为是弱引用类型),但是有很多也可以用:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div>hdcms</div><div>houdunren</div><script>let map = new WeakMap()map.set([],"houdunren.com")let divs = document.querySelectorAll("div")divs.forEach(item=>map.set(item,item.innerHTML))console.log(map)let arr = []map.set(arr,"hdcms.com")console.log(map.has(arr))console.log(map)</script>
</body>
</html>

WeakMap弱引用类型体验

弱引用类型特性:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><script>let hd = {name:'后盾人'}cms = hd let map = new WeakMap()map.set(hd,"houdunren.com")hd = nullcms = null console.log(map)//成为垃圾被删除</script>
</body>
</html>

所以没有keys和values这样的方法

使用WeakMap开发选课组件

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><ul><li><span></span>php<a href="javascript:;"> +</a></li><li><span></span>js      <a href="javascript:;">  +</a></li><li><span></span>向军<a href="javascript:;">+</a></li></ul><div><strong id="count">共选两门课</strong><p id="lists"></p></div><script>class Lesson{constructor(){this.lis = document.querySelectorAll("ul>li")this.countElem = document.getElementById("count")this.listElem = document.getElementById("list")this.map = new WeakMap()}run(){this.lis.forEach(li=>{li.querySelector("a").addEventListener('click',(event)=>{const a = event.targetconst state = li.getAttribute("select")if(state){li.removeAttribute("select")this.map.delete(li)a.innerHTML = "+"a.style.backgroundColor = 'green'}else{this.map.set(li)li.setAttribute("select",true)a.innerHTML = '-'a.style.backgroundColor = 'red'}console.log(this.map)})})}}new Lesson().run()</script>
</body>
</html>

 WeakMap视图渲染

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><ul><li><span></span>php<a href="javascript:;"> +</a></li><li><span></span>js      <a href="javascript:;">  +</a></li><li><span></span>向军<a href="javascript:;">+</a></li></ul><div><strong id="count">共选两门课</strong><p id="lists"></p></div><script>class Lesson{constructor(){this.lis = document.querySelectorAll("ul>li")this.countElem = document.getElementById("count")this.listElem = document.getElementById("lists")this.map = new WeakMap()}run(){this.lis.forEach(li=>{li.querySelector("a").addEventListener('click',(event)=>{const a = event.targetconst state = li.getAttribute("select")if(state){li.removeAttribute("select")this.map.delete(li)a.innerHTML = "+"a.style.backgroundColor = 'green'}else{this.map.set(li,true)li.setAttribute("select",true)a.innerHTML = '-'a.style.backgroundColor = 'red'}this.render()})})}count(){return [...this.lis].reduce((count,li)=>{return (count+=this.map.has(li)?1:0)},0)}lists(){return [...this.lis].filter(li=>{return this.map.has(li)}).map(li=>{// return `<span>${li.querySelector('span').innerHTML}</span>`const text = li.textContent.replace(li.querySelector('a').textContent, '').trim()return `<span>${text}</span>`}).join("")}render(){this.countElem.innerHTML = `共选了${this.count()}门课`this.listElem.innerHTML = this.lists()}}new Lesson().run()</script>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/6746.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python实现http文件服务器访问下载

//1.py import http.server import socketserver import os import threading import sys# 获取当前脚本所在的目录 DIRECTORY os.path.dirname(os.path.abspath(__file__))# 设置服务器的端口 PORT 8000# 自定义Handler&#xff0c;将根目录设置为脚本所在目录 class MyHTT…

[STM32 - 野火] - - - 固件库学习笔记 - - -十一.电源管理系统

一、电源管理系统简介 电源管理系统是STM32硬件设计和系统运行的基础&#xff0c;它不仅为芯片本身提供稳定的电源&#xff0c;还通过多种电源管理功能优化功耗、延长电池寿命&#xff0c;并确保系统的可靠性和稳定性。 二、电源监控器 作用&#xff1a;保证STM32芯片工作在…

二叉树相关oj题 1. 检查两颗树是否相同。

二叉树相关oj题 检查两颗树是否相同。OJ链接 另一颗树的子树。OJ链接 if(rootnull)易漏掉 会导致空指针异常翻转二叉树。OJ链接

批量提取多个 Excel 文件内指定单元格的数据

这篇文章将介绍如何从多个相同格式的Excel文件中&#xff0c;批量提取指定单元格的数据&#xff0c;合并后保存到新的工作薄。 全程0代码&#xff0c;可视化操作。 提取前&#xff1a; 提取后&#xff1a; 准备数据 这里准备了3个测试数据 开始提取 打开的卢易表&#xff0…

【真机调试】前端开发:移动端特殊手机型号有问题,如何在电脑上进行调试?

目录 前言一、怎么设置成开发者模式&#xff1f;二、真机调试基本步骤&#xff1f; &#x1f680;写在最后 前言 edge浏览器 edge://inspect/#devices 谷歌浏览器&#xff08;开tizi&#xff09; chrome://inspect 一、怎么设置成开发者模式&#xff1f; Android 设备 打开设…

GA-CNN-LSTM-Attention、CNN-LSTM-Attention、GA-CNN-LSTM、CNN-LSTM四模型多变量时序预测一键对比

GA-CNN-LSTM-Attention、CNN-LSTM-Attention、GA-CNN-LSTM、CNN-LSTM四模型多变量时序预测一键对比 目录 GA-CNN-LSTM-Attention、CNN-LSTM-Attention、GA-CNN-LSTM、CNN-LSTM四模型多变量时序预测一键对比预测效果基本介绍程序设计参考资料 预测效果 基本介绍 基于GA-CNN-LST…

C++入门14——set与map的使用

在本专栏的往期文章中&#xff0c;我们已经学习了STL的部分容器&#xff0c;如vector、list、stack、queue等&#xff0c;这些容器统称为序列式容器&#xff0c;因为其底层是线性序列的数据结构&#xff0c;里面存储的是元素本身。而本篇文章我们要来认识一下关联式容器。 &am…

从崩溃难题看 C 标准库与 Rust:线程安全问题引发的深度思考

在软件开发的世界里&#xff0c;每一次技术的变革和尝试都伴随着未知的挑战。EdgeDB 团队在将部分网络 I/O 代码从 Python 迁移到 Rust 的过程中&#xff0c;就遭遇了一场棘手的问题&#xff0c;这个问题不仅暴露了 C 标准库的线程安全隐患&#xff0c;也让我们对 Rust 的 “安…

班迪录屏:一款好用的屏幕录制软件

Bandicam&#xff08;班迪录屏&#xff09;是一款4K超清屏幕录像软件&#xff0c;最新版Bandicam v8.1.0.2516 绿色正式版已经集成授权信息&#xff0c;用户无需联网验证授权&#xff0c;启动软件即可直接使用已授权版本&#xff0c;享受良好的录制体验。这款软件完全摆脱了试用…

2025年国产化推进.NET跨平台应用框架推荐

2025年国产化推进.NET跨平台应用框架推荐 1. .NET MAUI NET MAUI是一个开源、免费&#xff08;MIT License&#xff09;的跨平台框架&#xff08;支持Android、iOS、macOS 和 Windows多平台运行&#xff09;&#xff0c;是 Xamarin.Forms 的进化版&#xff0c;从移动场景扩展到…

PBFT算法

在我的博客中对于RAFT算法也有详细的介绍&#xff0c;raft算法包含三种角色&#xff0c;分别是&#xff1a;跟随者&#xff08; follower &#xff09;&#xff0c;候选人&#xff08;candidate &#xff09;和领导者&#xff08; leader &#xff09;。集群中的一个节点在某一…

用Python和Tkinter标准模块建立密码管理器

用Python和Tkinter标准模块建立密码管理器 创建一个简单的密码管理器应用程序&#xff0c;帮助用户存储和管理他们的密码。使用Python的tkinter模块来创建一个图形用户界面&#xff08;GUI&#xff09;。 本程序支持 添加、查看、搜索、复制、修改、删除 功能。 本程序使用 …

OpenAI模块重构

文章目录 1.common-openai-starter1.目录结构2.OpenAiProperties.java 新增apiUrl3.OpenAIAutoConfiguration.java4.OpenAiClient.java 使用gson重构 2.common-openai-starter-demo1.目录结构2.application.yml 新增api-url3.OpenAiController.java4.OpenAiApplication.java5.测…

数据标注开源框架 Label Studio

数据标注开源框架 Label Studio Label Studio 是一个开源的、灵活的数据标注平台&#xff0c;旨在帮助开发者和数据科学家轻松创建高质量的训练数据集。它支持多种类型的数据&#xff08;如文本、图像、音频、视频等&#xff09;以及复杂的标注任务&#xff08;如分类、命名实体…

详解:TCP/IP五层(四层)协议模型

一.五层&#xff08;四层&#xff09;模型 1.概念 TCP/IP协议模型分为五层&#xff1a;物理层、数据链路层、网络层、传输层和应用层。这五层每一层都依赖于其下一层给它提供的网络去实现需求。 1&#xff09;物理层&#xff1a;这是最基本的一层&#xff0c;也是最接近硬件…

使用Python进行大模型的测试与部署

随着人工智能技术的飞速发展&#xff0c;大规模模型在各行各业的应用日益广泛。然而&#xff0c;如何有效测试这些模型以确保其稳定性和准确性&#xff0c;成为测试人员的们面临的一大挑战。本文将详细介绍在Python环境下&#xff0c;如何测试大模型&#xff0c;并探讨其部署策…

高并发处理 --- 超卖问题+一人一单解决方案

在高并发场景下&#xff0c;超卖和一人一单是两个典型的并发问题。为了解决这两个问题&#xff0c;我们可以使用乐观锁&#xff08;CAS&#xff09;和悲观锁&#xff0c;这两者分别有不同的实现方式和适用场景。下面我们详细介绍如何通过 乐观锁&#xff08;CAS&#xff09; 和…

【2024年华为OD机试】(C卷,100分)- 约瑟夫问题 (JavaScriptJava PythonC/C++)

一、问题描述 题目描述 输入一个由随机数组成的数列&#xff08;数列中每个数均是大于 0 的整数&#xff0c;长度已知&#xff09;&#xff0c;和初始计数值 m。 从数列首位置开始计数&#xff0c;计数到 m 后&#xff0c;将数列该位置数值替换计数值 m&#xff0c;并将数列…

浅谈APP之历史股票通过echarts绘图

浅谈APP之历史股票通过echarts绘图 需求描述 今天我们需要做一个简单的历史股票收盘价格通过echarts进行绘图&#xff0c;效果如下&#xff1a; 业务实现 代码框架 代码框架如下&#xff1a; . 依赖包下载 我们通过网站下载自己需要的涉及的图标&#xff0c;勾选之后进…

【0x0012】HCI_Delete_Stored_Link_Key命令详解

目录 一、命令参数 二、命令格式及参数 2.1. HCI_Delete_Stored_Link_Key 命令格式 2.2. BD_ADDR 2.3. Delete_All 三、生成事件及参数 3.1. HCI_Command_Complete事件 3.2. Status 3.3. Num_Keys_Deleted 四、命令执行流程 4.1. 命令发送阶段 4.2. 控制器处理阶段…