当前位置: 首页 > news >正文

Map、Set和Object的区别

Set

ES6提供了新的数据结构Set,类似于数组,但成员值是唯一的,没有重复的值

Set本身是一个构造函数(要 new),用来生成Set数据结构

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

每个值在 Set 中只能出现一次,因此常用做数组去重

可以接受一个数组作为参数,进行初始化

const s = new Set([1,2,3,4,4,3])
console.log([...s]) // [1,2,3,4]

Set对象的几个常用方法和属性

add() 向 Set 添加新元素
clear() 从 Set 中删除所有元素
delete() 删除由其值指定的元素
has() 如果值存在则返回 true
forEach() 为每个元素调用回调
keys() 返回 Set 对象中值的数组
size 返回元素个数

const s1 = new Set(["a","b","c","d"]);
s1.add("f");//添加f
s1.delete("a");//删除a
console.log(s1.has("b"));//是否含有b,返回布尔值
s1.clear();//全部清除
const ary = [...s1];
console.log(ary);

 Set对象的作用

去重

let mySet = new Set([1, 2, 3, 4, 4]);
[...mySet]; // [1, 2, 3, 4]

求并集(合并两个Set对象)

let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);
let union = new Set([...a, ...b]); // {1, 2, 3, 4}

求交集

let a = new Set([1, 2, 3])
let b = new Set([2, 3, 6])
let intersect = new Set([...a].filter(x => b.has(x)))  // {2, 3} 利用数组的filter方法

 求差集

let a = new Set([1, 2, 3])
let b = new Set([4, 3, 2])
let difference = new Set([...a].filter(x => !b.has(x))) //  {1} 

Map

Map对象保存键值对

Map本身是一个构造函数(要 new),用来生成Map数据结构

Map对象允许你储存任何类型的作为一个键或一个值

可以接受一个数组作为参数,进行初始化

const map = new Map([['key1','value1'],['key2','value2']])
console.log(map) // {'key1' => 'value1', 'key2' => 'value2'}// 把对象做为key
const myKey = {dec:'本对象做为map键'};
map.set(myKey, 'myKey的键值'); //  {'key1' => 'value1', 'key2' => 'value2', {…} => 'myKey的键值'}
map.get(myKey); // 'myKey的键值'

Map的几个常用方法

set(key, val) 向Map中添加新元素

get(key)  通过键值查找特定的数值并返回

has(key) 判断Map对象中是否有Key所对应的值,有返回true,否则返回false

delete(key) 通过键值从Map中移除对应的数据

clear() 将这个Map中的所有元素删除

const map = new Map([['key1','value1'],['key2','value2']]);map.set('myKey', 'myKey的键值'); // {'key1' => 'value1', 'key2' => 'value2', 'mykey' => 'myKey的键值'}
map.get('myKey'); // 'myKey的键值'
map.has('myKey'); // true
map.delete('myKey'); // true
map.clear(); // undefined

keys() 返回键名的遍历器

values() 返回键值的遍历器 

entries() 返回键值对的遍历器  

 forEach() 使用回调函数遍历每个成员

const map = new Map([['a', 11], ['b',  22]])for (let key of map.keys()) {console.log(key)
}
// "a"
// "b"for (let value of map.values()) {console.log(value)
}
// 11
// 22for (let item of map.entries()) {console.log(item)
}
// ["a", 11]
// ["b", 22]console.log(map.entries===map[Symbol.iterator]);//true
for (let item of map[Symbol.iterator]()) {console.log(item)
}
// ["a", 11]
// ["b", 22]// 或者
for (let [key, value] of map.entries()) {console.log(key, value)
}
// "a" 11
// "b" 22// for...of...遍历map等同于使用map.entries()for (let [key, value] of map) {console.log(key, value)
}
// "a" 11
// "b" 22map.forEach(item=>{console.log(item);
})//11 22

 Map与对象的互换

const obj = {}
const map = new Map()
map.set('a', 11)
map.set('b', 22)
for(let [key,value] of map) {obj[key] = value
}
console.log(obj) // {a:11, b: 22}

Map和Object的区别 

1.Object的key 必须是简单数据类型(整数、字符串、symbol),map的key可以是任何类型

2.Map元素插入顺序是FIFO,object没有

3.Map继承Object

4.Map在存储大量元素的时候性能表现更好

5.写入删除密集的情况应该使用 Map

Map和Set的区别

1.一个Object 的键只能是字符串或者 Symbols,但一个Map 的键可以是任意值

2.Map中的键值是有序的(FIFO 原则),而添加到对象中的键则不是

3.Map的键值对个数可以从 size 属性获取,而 Object 的键值对个数只能手动计算

4.Object 都有自己的原型,原型链上的键名有可能和你自己在对象上的设置的键名产生冲突

相关文章:

Map、Set和Object的区别

Set ES6提供了新的数据结构Set,类似于数组,但成员值是唯一的,没有重复的值 Set本身是一个构造函数(要 new),用来生成Set数据结构 Set 对象允许你储存任何类型的唯一值,无论是原始值或者是对象引用 每个值在 Set 中…...

Web 安全之盗链(Hotlinking)攻击详解

目录 什么是盗链 盗链原理 盗链类型 盗链的危害 如何发现盗链 盗链防范措施 法律法规与应对策略 小结 盗链(Hotlinking)攻击,作为互联网安全领域的一个重要话题,涉及到侵犯版权、滥用资源和网络安全等多个层面。盗链现象普…...

leetcode算法笔记-算法复杂度

对于时间复杂度,主要包括三种情况: 渐进紧确界: O渐进上界: 渐进下界: 加法原则:不同的时间复杂度相加取阶数最高的 乘法原则:不同的时间复杂度相乘,结果为时间复杂度的乘积 阶乘…...

推荐算法详解

文章目录 推荐算法引言基于内容的推荐原理算法步骤注意点可以优化的地方示例代码讲解 协同过滤推荐原理算法步骤注意点可以优化的地方示例代码讲解 混合推荐系统原理算法步骤注意点可以优化的地方示例1代码讲解1示例2代码讲解2 基于知识的推荐原理算法步骤注意点可以优化的地方…...

Java找不到包解决方案

在跟着教程写Spingboot后端项目时,为了加快效率,有时候有的实体文件可以直接粘贴到目录中,此时运行项目会出现Java找不到包的情况,即无法找到导入的实体文件,这是项目没有更新的原因。解决方法: 刷新Maven:…...

vue的css深度选择器 deep /deep/

作用及概念 当 <style> 标签有 scoped 属性时&#xff0c;它的 CSS 只作用于当前组件中的元素&#xff0c;父组件的样式将不会渗透到子组件。在vue中是这样描述的&#xff1a; 处于 scoped 样式中的选择器如果想要做更“深度”的选择&#xff0c;也即&#xff1a;影响到子…...

2024年华为OD机试真题-计算三叉搜索树的高度-(C++)-OD统一考试(C卷D卷)

题目描述: 定义构造三叉搜索树规则如下: 每个节点都存有一个数,当插入一个新的数时,从根节点向下寻找,直到找到一个合适的空节点插入。 查找的规则是: 1. 如果数小于节点的数减去500,则将数插入节点的左子树 2. 如果数大于节点的数加上500,则将…...

# ERROR: node with name “rabbit“ already running on “MS-ITALIJUXHAMJ“ 解决方案

ERROR: node with name “rabbit” already running on “MS-ITALIJUXHAMJ” 解决方案 一、问题描述&#xff1a; 1、启动 rabbitmq-server.bat 服务时&#xff0c;出错 Error 2、查询 rabbitmqctl status 状态时&#xff0c;出错 Error 3、停止 rabbitmqctl stop 服务时&a…...

class常量池、运行时常量池和字符串常量池详解

类常量池、运行时常量池和字符串常量池这三种常量池&#xff0c;在Java中扮演着不同但又相互关联的角色。理解它们之间的关系&#xff0c;有助于深入理解Java虚拟机&#xff08;JVM&#xff09;的内部工作机制&#xff0c;尤其是在类加载、内存分配和字符串处理方面。 类常量池…...

Meilisearch使用过程趟过的坑

Elasticsearch 做为老牌搜索引擎&#xff0c;功能基本满足&#xff0c;但复杂&#xff0c;重量级&#xff0c;适合大数据量。 MeiliSearch 设计目标针对数据在 500GB 左右的搜索需求&#xff0c;极快&#xff0c;单文件&#xff0c;超轻量。 所以&#xff0c;对于中小型项目来说…...

全面升级企业网络安全 迈入SASE新时代

随着数字化业务、云计算、物联网和人工智能等技术的飞速发展&#xff0c;企业的业务部署环境日渐多样化&#xff0c;企业数据的存储由传统的数据中心向云端和SaaS迁移。远程移动设备办公模式的普及&#xff0c;企业多分支机构的加速设立&#xff0c;也使得企业业务系统的用户范…...

2024.1IDEA 到2026年

链接&#xff1a;https://pan.baidu.com/s/1hjJEV5A5k1Z9JbPyBXywSw?pwd9g4i 提取码&#xff1a;9g4i解压之后,按照 操作说明.txt 操作; IntelliJ IDEA 2024.1 (Ultimate Edition) Build #IU-241.14494.240, built on March 28, 2024 Licensed to gurgles tumbles You have…...

uniapp——点赞、取消点赞

案例 更新点赞状态&#xff0c;而不是每次都刷新整个列表。避免页面闪烁&#xff0c;提升用户体验 代码 <view class"funcBtn zan" click"onZan(index,item.id)"><image src"/static/images/circle/zan.png" mode"aspectFill&…...

react经验15:拖拽排序组件dnd-kit的使用经验

应用场景 列表中的成员可鼠标拖拽改变顺序 实施步骤 前置引入 import type { DragEndEvent } from dnd-kit/core import { DndContext } from dnd-kit/core import {arrayMove,/*垂直列表使用verticalListSortingStrategy,横向列表使用horizontalListSortingStrategy*/vert…...

Webpack模块联邦:微前端架构的新选择

Webpack模块联邦&#xff08;Module Federation&#xff09;是Webpack 5引入的一项革命性特性&#xff0c;它彻底改变了微前端架构的实现方式。模块联邦允许不同的Web应用程序&#xff08;或微前端应用&#xff09;在运行时动态共享代码&#xff0c;无需传统的打包或发布过程中…...

CMake 学习笔记(访问Python)

CMake 学习笔记&#xff08;访问Python&#xff09; 利用Python可以做很多事情。比如&#xff1a; 利用 Python 自动生成一些代码。 在我们的程序中植入一个 Python 解释器。 为了做这些事情。就需要 CMake 能够知道 python 装在哪里&#xff0c;装的是什么版本的 python&a…...

【ruoyi】docker部署 captchaImage接口 FontConfiguration空指针异常

后台服务报错captchaImage接口空指针异常&#xff0c;无法启动项目&#xff1a; [http-nio-4431-exec-27] ERROR c.r.f.w.e.GlobalExceptionHandler - [handleRuntimeException,93] - 请求地址/captchaImage,发生未知异常.java.lang.NullPointerException: nullat sun.awt.Font…...

P1443 马的遍历

题目描述: 有一个 &#x1d45b;&#x1d45a;nm 的棋盘&#xff0c;在某个点 (&#x1d465;,&#x1d466;)(x,y) 上有一个马&#xff0c;要求你计算出马到达棋盘上任意一个点最少要走几步。 代码: package lanqiao;import java.util.*;public class Main {static int n,m…...

AI学习指南概率论篇-贝叶斯推断

AI学习指南概率论篇-贝叶斯推断 概述 在人工智能中&#xff0c;贝叶斯推断是一种基于贝叶斯统计理论的推理方法。它通过使用概率论的知识&#xff0c;结合先验信息和观测数据&#xff0c;来更新对未知变量的推断。贝叶斯推断提供了一种合理的方法来处理不确定性&#xff0c;并…...

大数据测试

1、前言 大数据测试是对大数据应用程序的测试过程&#xff0c;以确保大数据应用程序的所有功能按预期工作。大数据测试的目标是确保大数据系统在保持性能和安全性的同时&#xff0c;平稳无差错地运行。 大数据是无法使用传统计算技术处理的大型数据集的集合。这些数据集的测试涉…...

Python多解释器冷启动优化:从2.1s到87ms的极致压缩术(附可复用的预热调度器)

第一章&#xff1a;Python多解释器冷启动优化&#xff1a;从2.1s到87ms的极致压缩术&#xff08;附可复用的预热调度器&#xff09; 在微服务与Serverless场景中&#xff0c;Python多解释器&#xff08;如PyO3、subinterpreters或进程级隔离&#xff09;常因模块导入、C扩展初始…...

03 AgentSkills 生态体系与跨平台支持全景

03 AgentSkills 生态体系与跨平台支持全景 关键词&#xff1a;AgentSkills 生态、跨平台支持、Claude Code、Cursor、GitHub Copilot、VS Code、Spring AI、SkillsMP、Skill Seekers、技能共享、Symlink、官方技能库一、从标准到生态&#xff1a;一项规范的生命力 衡量一个技术…...

如何从零构建6GHz开源矢量网络分析仪:3个核心模块详解

如何从零构建6GHz开源矢量网络分析仪&#xff1a;3个核心模块详解 【免费下载链接】LibreVNA 100kHz to 6GHz 2 port USB based VNA 项目地址: https://gitcode.com/gh_mirrors/li/LibreVNA LibreVNA是一款功能强大的开源USB矢量网络分析仪&#xff0c;工作频率覆盖100k…...

Python中数据分块处理的实现方法

在实际的数据处理任务中&#xff0c;我们经常需要处理大规模数据集。一次性加载所有数据到内存可能会导致内存溢出&#xff0c;这时数据分块处理就显得尤为重要。本文将介绍Python中三种高效的数据分块处理方法。 一、为什么需要数据分块处理&#xff1f; 在处理大型数据集时…...

OFA图像语义蕴含模型效果展示:漫画分镜图+剧情假设的叙事逻辑连贯性验证

OFA图像语义蕴含模型效果展示&#xff1a;漫画分镜图剧情假设的叙事逻辑连贯性验证 1. 引言&#xff1a;当漫画遇上AI逻辑验证 你有没有过这样的经历&#xff1f;看漫画时突然发现前后剧情对不上&#xff0c;或者某个分镜的画面和对话明显矛盾&#xff1f;这种叙事逻辑的不连…...

【服务器】上传百度网盘数据至服务器

目录方法一&#xff1a;使用开源命令行工具 BaiduPCS-Go (最推荐)实例&#xff1a;下载网盘数据实例&#xff1a;上传服务器数据至百度网盘单个文件测试上传批量裁剪文件参考方法一&#xff1a;使用开源命令行工具 BaiduPCS-Go (最推荐) 这是目前在 Linux/Windows 服务器上最流…...

Nanbeige4.1-3B vLLM模型水印:输出内容可追溯的版权保护技术实现

Nanbeige4.1-3B vLLM模型水印&#xff1a;输出内容可追溯的版权保护技术实现 1. 引言&#xff1a;当AI生成内容遇上版权难题 你有没有想过&#xff0c;如果AI帮你写了一篇文章、一段代码或者一个创意方案&#xff0c;这份成果的“所有权”到底归谁&#xff1f;随着像Nanbeige…...

零代码部署YOLOv9:官方镜像5分钟快速上手,实测效果惊艳

零代码部署YOLOv9&#xff1a;官方镜像5分钟快速上手&#xff0c;实测效果惊艳 1. 为什么选择YOLOv9官方镜像 目标检测领域的最新突破YOLOv9已经发布&#xff0c;但很多开发者在尝试部署时遇到了各种环境配置问题。这个官方预构建的镜像解决了三大核心痛点&#xff1a; 环境配置…...

万字长文 解析串口通信

一.目标 处理器与外部设备通信的两种方式 单工只允许一个方向 半双工就像对讲机 全双工就像打电话 按照有无时钟同步 分为 1帧等于1个起始位 加上数据位 加上效验位 停止位 波特率是一秒传输的字节数 起始位(Start Bit): 起始位是数据帧的同步标志位,固定为低电平(…...

3分钟搞定:Source Code Pro字体终极配置指南,让代码阅读体验提升300%

3分钟搞定&#xff1a;Source Code Pro字体终极配置指南&#xff0c;让代码阅读体验提升300% 【免费下载链接】source-code-pro Monospaced font family for user interface and coding environments 项目地址: https://gitcode.com/gh_mirrors/so/source-code-pro 你是…...