【JavaScript】数组-集合-Map-对象-Class用法一览

news2024/11/5 22:51:21

文章目录

  • 数组
  • 集合
  • Map
  • 对象
  • Class

数组

//定义数组
let arrInit = [10, 11]
console.log("arrInit", arrInit)

//向数组末尾添加一个或多个元素, 并返回修改后数组的长度
let arrInitLength = arrInit.push(12, 13)
console.log("arrInit", arrInit) //[10, 11, 12, 13]
console.log("arrInitLength", arrInitLength)

//向数组开头添加一个或多个元素, 并返回修改后数组的长度
arrInitLength = arrInit.unshift(8, 9)
console.log("arrInit", arrInit) //[8, 9, 10, 11, 12, 13]
console.log("arrInitLength", arrInitLength)

//删除数组中第一个元素, 并返回被删除元素
let delFstElement = arrInit.shift()
console.log("arrInit", arrInit) //[9, 10, 11, 12, 13]
console.log("delElement", delFstElement) //8

//删除数组最后一个元素, 并返回被删除元素
delLstElement = arrInit.pop()
console.log("arrInit", arrInit) //[9, 10, 11, 12]
console.log("delElement", delLstElement) //13

//删除元素, 并返回包含被删除元素的数组 splice(要删除元素的索引位置, 要删除的元素数量)
//let delarrInit = arrInit.splice(2, 1) // 删除第3个元素 [数组的索引是从 0 开始]
let delarrInit = arrInit.splice(2, 2) // 删除第3和第4个元素
console.log("arrInit", arrInit) //[9, 10]
console.log("delarrInit", delarrInit) //[11, 12]

//颠倒数组中元素的顺序
arrInit.reverse()
console.log("arrInit", arrInit) //[10, 9]

//数组中的元素按照首字母顺序排序
let arrInit2 = ['peach', 'apple', 'orange']
arrInit2.sort()
console.log("arrInit2", arrInit2) //['peach', 'banana', 'orange']

//数组中的元素按照数字排序
let arrInit3 = [5, 20, 13, 1, 4]
//arrInit3.sort() //默认情况下 sort() 方法使用字符串排序, 导致并没有按照数字大小排序
/*
	比较函数 (a, b) => a - b 接收两个参数 a 和 b, 用于比较这两个元素的大小, 返回 a - b 的结果决定了 sort() 方法的排序顺序
	若 a < b, 则 a - b 是一个负数, 表示 a 应该在 b 前面
	若 a = b, 则 a - b 是 0, 位置保持不变
	若 a > b, 则 a - b 是一个正数, 表示 a 应该在 b 后面
*/
arrInit3.sort((a, b) => a - b)
console.log("arrInit3", arrInit3) //[1, 4, 5, 13, 20]

//筛选符合条件的元素, 返回一个新的数组
let arrInit4 = [10, 11, 13, 12, 14, 15];
let newarrInit = arrInit4.filter((value, index) => {
    return value > 12 && index % 2 === 0; // 只保留偶数索引的元素
});
console.log("newarrInit", newarrInit);

//将多个数组或值合并为一个新数组
let arrInit5 = ["十六", "十七", "十八"]
//newarrInit = arrInit3.concat(arrInit5) //[1, 4, 5, 13, 20, '十六', '十七', '十八']
newarrInit = arrInit4.concat(arrInit5, 19, 20) //[10, 11, 12, 13, 14, 15, '十六', '十七', '十八', 19, 20]
console.log("newarrInit", newarrInit)

//使用for...of循环遍历数组
let arrInit6 = ["demo", "baidu.com", 100] //数组可以包含不同的数据类型
for (let item of arrInit6) {
	console.log("for...of", item)
}

//使用forEach方法来遍历数组
arrInit6.forEach((value,index) => {
	console.log("forEach", value,"index", index)
})

集合

//创建Set集合
//let colors = new Set() //创建一个空的Set集合
let colors = new Set(['red', 'orange', 'green']) //创建一个包含初始值的Set集合

//向Set集合中添加新的元素
colors.add('mango')
//colors.add("orange") //若该元素已经存在, 则不会重复添加, 因为 Set 中的元素必须唯一
console.log("colors", colors)

//从Set集合中删除元素
colors.delete('green')
console.log("colors", colors)

//检查Set集合是否包含指定元素
console.log("colors.has", colors.has('green'))

//获取Set集合的大小
console.log("colors.size", colors.size)

//使用 Array.from() 方法将 Set集合 转换为 数组
let arr = Array.from(colors)
console.log("arr", arr)

//使用扩展运算符将 Set集合 转换为 数组
let arr2 = [...colors]
console.log("arr2", arr2)

//扩展运算符是用于展开可迭代对象(如数组、字符串等)
//let web = 'baidu.com'
let web = '百度一下'
let webArr = [...web] //使用扩展运算符将 字符串 转换为 数组
console.log("webArr", webArr) //['百', '度', '一', '下']

//使用for...of循环遍历 Set集合
for (let item of colors) {
    console.log("for...of", item)
}

//使用forEach方法来遍历 Set集合
colors.forEach(value => {
    console.log("forEach", value)
})

//清空 Set
colors.clear()
console.log("colors.size", colors.size)

//将 数组 转换为 Set集合 实现数组去重
let numberArr = [1, 2, 3, 3, 2, 1]
let numberSet = new Set(numberArr)
console.log(numberSet)

Map

//创建Map集合
//let person = new Map() //创建一个空的Map集合
let person = new Map([
    ["name", "小明"],
    ["gender", "男"],
    ["web", "baidu.com"]
])

//向Map集合中添加新的元素
person.set('height', 180)
//在Map集合中, 每个键都是唯一的, 当使用相同的键再次调用 set() 方法时, 会替换原来键对应的值
person.set('web', "www.baidu.com")
console.log("person", person)

//删除元素
person.delete('gender')
console.log("person", person)

//检查Map集合是否包含指定元素
console.log("person.has", person.has('gender'))

//获取Map集合的大小
console.log("person.size", person.size)

//将Map集合转换为数组
let arr = Array.from(person)
console.log("arr", arr)

//使用扩展运算符将 Map集合 转换为 数组
let arr2 = [...person]
console.log("arr2", arr2)

//使用for...of循环遍历Map集合
//解构可以从数组或对象中提取值并赋给变量
//[key, value] 就是一种解构语法, 用于将 Map 集合中的键值对解构为 key 和 value 两个变量
for (let [key, value] of person) {
    console.log("for...of", key, value)
}

//使用forEach方法遍历Map集合的键值对
person.forEach((value, key) => {
    console.log("forEach", key, value)
})

//清空Map集合
person.clear()
console.log("person.size", person.size)

对象

let person = {
    name: "小明",
    gender: "男",
    web: "baidu.com",
}

//向对象中添加新的属性
person.height = 180
//在对象中,每个键都是唯一的,当使用相同的键再次赋值时,会替换原来键对应的值
person.web = "www.baidu.com"
console.log("person", person)

//删除属性
delete person.gender
console.log("person", person)

//检查对象是否包含指定属性
let has = "gender" in person
console.log("has", has)

//获取对象的属性数量
console.log("keysArr", Object.keys(person)) //Object.keys() 用于获取对象属性名的数组
console.log("length", Object.keys(person).length)

//将对象转换为数组
let arr = Object.entries(person) //Object.entries() 用于获取对象的键值对数组
console.log("arr", arr)

//使用for...in循环遍历对象 
//for...of 用于遍历可迭代对象[如数组、Set、Map、字符串等]
//for...in 用于遍历对象的可枚举属性
for (let key in person) {
    console.log("for...in", key, person[key])
}

//使用forEach方法遍历对象的属性和值
Object.entries(person).forEach(([key, value]) => {
    console.log("forEach", key, value)
})

//清空对象
person = {}
console.log("length", Object.keys(person).length)

Class

class Person {
    // 若在类中没有显式声明属性, 但在构造函数或方法中引用了未声明的属性, 会自动将其视为实例属性
    name; // 姓名
    web;  // 个人网站

    // 构造函数,用于初始化属性
    constructor(name, web) {
        this.name = name;
        this.web = web;
    }

    // 方法,返回个人信息
    info() {
        // return "姓名:" + this.name + " 个人网站:" + this.web;
        return `姓名:${this.name} 个人网站:${this.web}`; // 模板字符串
    }
}

// 在面向对象编程中,实例(instance) 是根据类(class) 创建的具体对象,使用关键字 new 可以创建一个类的实例
// 创建 Person 类实例,传入 "姓名"、"个人网站" 参数
let person = new Person("小明", "baidu.com");

console.log("person", person);
console.log("web", person.web);
console.log("info", person.info());

私有属性及get set方法

class Person {
    name
    #web //私有属性是指仅在类内部可访问和操作的属性, 外部无法直接访问和修改
    
    constructor(name, web) {
        this.name = name
        this.#web = web
    }
    
    //使用存取器 getter 获取私有属性
    get web() {
        return this.#web
    }
    
    //使用存取器 setter 设置私有属性
    set web(value) {
        this.#web = value
    }
    
    info() {
        return `姓名:${this.name} 个人网站:${this.web}`
    }
}

let person = new Person("小明", "baidu.com")

console.log("person", person)
console.log("web", person.web) //使用存取器 getter 获取私有属性
console.log("info", person.info())

person.web = "www.baidu.com" //使用存取器 setter 设置私有属性
console.log("web", person.web)

继承

//父类
class Person {
    name
    gender

    constructor(name, gender) {
        this.name = name
        this.gender = gender
    }

    sleep() {
        return `${this.name} 休息中...`
    }
}

//子类
class xiaoming extends Person {
    web

    constructor(name, gender, web) {
        super(name, gender) //调用父类构造函数

        this.web = web
    }

    eat() {
        return `${this.name} 正在吃饭...`
    }
}

let xiaoming = new xiaoming("小明", "男", "baidu.com")

console.log("xiaoming", xiaoming)
console.log("web", xiaoming.web)
console.log("eat", xiaoming.eat())

console.log("gender", xiaoming.gender)
console.log("sleep", xiaoming.sleep())

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

嵌入式硬件工程师的职业发展规划

嵌入式硬件工程师可以按照以下阶段进行职业发展规划&#xff1a; 1. **初级阶段&#xff08;1-3 年&#xff09; ** - **技术学习与积累**&#xff1a; **电路基础强化**&#xff1a; 深入学习模拟电路和数字电路知识&#xff0c;能够熟练分析和设计基本的电路&#xff0c;…

2024.11.5- Redis(3)

五 Redis的发布订阅 5.1 介绍 Redis通过publish、subscribe和psubcribe、Unsubscribe和punsubscribe等命令实现发布、订阅和退订功能。这些命令被广泛用于构建即时通信应用&#xff0c;比如网络聊天室(chatroom)和实时广播、实时提醒等。 ​ 角色: -- 客户端通过PUBLISH命令向…

最全Kafka知识宝典之消费端深度剖析

一、Kafka消费者基本特性 消费者与消费者组的关系 消费者用一个消费者组名标记自己 一个发布在Topic上消息被分发给此消费者组中的一个消费者 假如所有的消费者都在一个组中&#xff0c;那么这就变成了队列模型&#xff0c;即这些消费者只有一个消费者会收到消息假如所有的…

MySQL之JDBC入门详解

01-JDBC入门 一、JDBC概念 jdbc : java database connection , java数据库连接 jdbc是sun公司定义的java程序访问数据库的规范。 二、JDBC操作需要6步 三、入门程序 1、使用eclipse打开一个新的工作空间 2、切换到java视图界面 3、创建java工程&#xff1a;01-jdbc-helloworl…

ctfshow——web(总结持续更新)

文章目录 1、基础知识部分2、php伪协议2.1 php://input协议2.2 data://text/plain协议 3、webshell连接工具3.1 蚁剑连接一句话木马 4、各个web中间件重要文件路径4.1 Nginx 5、sqlmap使用6、php特性6.1 md5加密漏洞6.2 php特殊符号 7、TOP 10漏洞7.1 SQL注入7.2 代码执行7.3 文…

数论——约数(完整版)

2、约数 一个数能够整除另一数&#xff0c;这个数就是另一数的约数。 如2&#xff0c;3&#xff0c;4&#xff0c;6都能整除12&#xff0c;因此2&#xff0c;3&#xff0c;4&#xff0c;6都是12的约数。也叫因数。 1、求一个数的所有约数——试除法 例题&#xff1a; 给定…

python: Parent-child form operations using ttkbootstrap

# encoding: utf-8 # 版權所有 2024 ©塗聚文有限公司 # 許可資訊查看&#xff1a;言語成了邀功的功臣&#xff0c;還需要行爲每日來值班嗎&#xff1f; # 描述&#xff1a; 主、子表單 窗體傳值 Parent-child form operations # Author : geovindu,Geovin Du 塗聚文. …

读书笔记#深入理解Java虚拟机(第三版)# Java内存模型与线程

深入理解Java虚拟机&#xff08;第三版&#xff09;# 高效并发 chap12 Java内存模型与线程 概述 在许多场景下&#xff0c;让计算机同时去做几件事情&#xff0c;不仅是因为计算机的运算能力强大了&#xff0c;还有一个很重要的原因是计算机的运算速度与它的存储和通信子系统的…

文心一言 VS 讯飞星火 VS chatgpt (383)-- 算法导论24.5 3题

三、对引理 24.10 的证明进行改善&#xff0c;使其可以处理最短路径权重为 ∞ ∞ ∞ 和 − ∞ -∞ −∞ 的情况。引理 24.10(三角不等式)的内容是&#xff1a;设 G ( V , E ) G(V,E) G(V,E) 为一个带权重的有向图&#xff0c;其权重函数由 w : E → R w:E→R w:E→R 给出&…

阿里云-部署CNI flannel集群网络

环境 1.一台阿里云作为k8s-master:8.130.XXX.231&#xff08;阿里云私有IP&#xff09; 2.Vmware 两个虚拟机分别作为 k8s-node1:192.168.40.131 k8s-node2:192.168.40.131 3.安装Docker 部署过程 k8s-master,k8s-node1,k8s-node2 初始操作 # 关闭防火墙 systemctl stop fi…

「C/C++」C++设计模式 之 抽象工厂模式(Abstract Factory)

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

免费在线绘图:创意与效率的结合

在数字化时代&#xff0c;绘图已成为各行业人士的基本技能。无论你是设计师、学生、创作者还是爱好者&#xff0c;免费的在线绘图软件都是释放创意和表达思想的理想选择。本文将介绍七款功能全面、免费的在线绘图软件&#xff0c;帮助你轻松实现创作愿景。只需网络连接&#xf…

【教程】Git 标准工作流

目录 前言建仓&#xff0c;拉仓&#xff0c;关联仓库修改代码更新本地仓库&#xff0c;并解决冲突提交代码&#xff0c;合入代码其他常用 Git 工作流删除本地仓库和远程仓库中的文件日志打印commit 相关 前言 Git 是日常开发中常用的版本控制工具&#xff0c;配合代码托管仓库…

基于springboot+vue实现的任务管理系统(源码+L文)4-103

第4章 系统设计 4.1 总体功能设计 员工&#xff0c;经理&#xff0c;管理员都需要登录才能进入任务管理系统&#xff0c;使用者登录时会在后台判断使用的权限类型&#xff0c;包括一般使用者和管理者,一般使用者为员工和经理&#xff0c;对员工只能提供任务信息显示查询&…

vue2中使用vue-awesome-swiper实现轮播

swiper官方文档&#xff1a;Swiper中文网-轮播图幻灯片js插件,H5页面前端开发 1.安装 注意&#xff1a;swiper和vue-awesome-swiper的版本一定一定一定要相对应&#xff0c;版本对应如下&#xff1a; Swiper 5-6 vue-awesome-swiper4.1.1(vue2) Swiper 4.x vue-awesome-swi…

Node.js 入门指南:从零开始构建全栈应用

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;node.js篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来node.js篇专栏内容:node.js-入门指南&#xff1a;从零开始构建全栈应用 前言 大家好&#xff0c;我是青山。作…

favicon是什么文件?如何制作网站ico图标?

一般我们做网站的话&#xff0c;都会制作一个独特的ico图标&#xff0c;命名为favicon.ico。这个ico图标一般会出现在浏览器网页标题前面。如下图红色箭头所示&#xff1a; 部分博客导航大全也会用到所收录网站的ico图标。比如boke123导航新收录的网站就不再使用网站首页缩略图…

“大跳水”的全新奥迪A3,精准狙击年轻人的心

文/王俣祺 导语&#xff1a;随着传统豪华品牌在国内市场的全面崩盘&#xff0c;奥迪再一次坐不住了。这次&#xff0c;奥迪“割肉”的目标瞄准了被称为“年轻人第一台豪车”的奥迪A3&#xff0c;这款车问世以来&#xff0c;就凭借出色的性能与品质收获了一大批年轻粉丝。如今&a…

两台手机如何提词呢,一台手机后置高清摄像一台手机前置提词+实时监测状态的解决方案来喽

拍视频只会用前置摄像头可不行啊&#xff0c; 后置高清才会更有流量&#xff0c; 你看哦&#xff0c;我用的是后置摄像头拍摄&#xff0c; 然后前面就用来提词&#xff0c; 它不光能提词&#xff0c; 和其他家不一样的是&#xff0c; 还能把后面手机画面投影到前面手机 这样呀&…

[SWPUCTF 2021 新生赛]easy_sql的write up

开启NSSCTF靶场&#xff0c;在浏览器中访问链接&#xff0c;看到让我们输入点什么还有标签页名字提示&#xff1a; "参数是wllm" 直接/?wllm1访问一下&#xff1a; 这里就直接用sqlmap直接爆破了&#xff1a; 查看数据库有哪些&#xff1a; python sqlmap.py -u …