Javascript集合引用类型(一)

news2024/9/24 1:21:01

思维导图

Javascript集合引用类型(一)思维导图
Javascript集合引用类型(一)思维导图
  • 对象

  • 数组与定型数组

  • Map、WeakMap、Set以及WeakSet类型

1. Object

创建的对象的两种方式:new 操作符和对象字面量

使用对象字面量的更多,因为代码量少;

2. Array

Array构造函数,es6新增的两个创建数组的静态方法:from()和of()

2.1 from()将类数组结构转换为数组实例

  • 任何可迭代的结构

  • 有一个length属性

  • 可索引元素的结构

2.1.1 案例:

// 字符串拥有length属性
console.log(Array.from('Matt'))  //  ['M', 'a', 't', 't']

2.1.2 案例:

// 浅复制数组
let a1 = [1,2,3,4]
let a2 = Array.from(a1)
console.log(a2)  //  [1, 2, 3, 4]

2.1.3 案例:在函数内部进行数组转换

// 获取函数的类数组进行转换
function getArray () {
    return Array.from(arguments)
}
console.log(getArray(1,24,56,8,92))  // [1, 24, 56, 8, 92]

2.1.4 案例:将对象转换成数组

let object = {
    0:'哈哈',
    1:2,
    2:'yes',
    3:4,
    4:5,
    length: 5
}
console.log(Array.from(object))  // ['哈哈', 2, 'yes', 4, 5]

2.1.5 接收参数

  • 参数1:需要转换成数组的参数

  • 参数2:增强型数据,对需要处理的数据内容进行处理

  • 参数3:如果第二个参数是函数,第三个参数是作为映射this值处理;

let object = {
    0:1,
    1:12,
    2:68,
    3:4,
    4:12,
    length:5
}
// 接收两个入参
let arr = Array.from(object,x => x**2) //[1, 144, 4624, 16, 144]
// 接收三个入参
let arr = Array.from(object,function(x) {return x*this.number},{number:4} )
console.log(arr) // [4, 48, 272, 16, 48]

普通业务场景是一个或者两个入参

2.2 of() 将一组参数转换为数组

2.3 数组空位

注意 由于行为不一致和存在性能隐患,因此实践中要避免使用数组空位。如果确实需要 空位,则可以显式地用 undefined 值代替。

let arr = [1,2,,,,,8]
console.log(Array.of(...arr))  // [1, 2, undefined, undefined, undefined, undefined, 8]

检查数组的两种方法

  • instanceof 有兼容问题

  • isArray() 建议使用

2.4 复制、填充方法

2.4.1 filll 填充
let zero = [0,0,0,0,0]
zero.fill(6) // [6, 6, 6, 6, 6]
zero.fill(0) // [0, 0, 0, 0, 0]
zero.fill(8,2,4)  // [0, 0, 8, 8, 0]
2.4.2 copyWithin复制
// 从索引0开始复制,复制4位数
// 插入到第五位开始
// 以目标源的边界值停止
let arr = [21,22,23,24,25,26]
console.log(arr.copyWithin(4)) // [21, 22, 23, 24, 21, 22]

索引过低,过高时,无效

2.5 栈方法

push() 将接收的参数添加到数组末尾,length同时改变 栈后进先出,数据项的插入(称为推入,push)和删除(称为弹出,pop),只在一个地方发生,即栈顶。

pop() 删除数组的最后一项,length同时改变,pop() 返回被删除的项;

2.6 栈方法

队列先进先出 shift() 删除数组第一项,并返回,把数组当成队列来使用 unshift() 在数组开头添加任意多个值

  • shift()开头删除, pop()末尾删除

  • unshift()开头添加,push()末尾添加

2.7 排序方法

reverse() 方向排序

sort() 以字符串的形式对数组进行排序,不能符合正常的场景下的要求,需要使用函数再次处理

案例一:

正序

function compare(value1,value2){
    if(value1 < value2){
        return -1
    } else if (value1 > value2) {
        return 1
    } else {
        return 0
    }
}
let arr = [2,6,12,9,4]
console.log(arr.sort(compare))   // [2, 4, 6, 9, 12]
案例二:

倒序

function compare(value1,value2){
    if(value1 < value2){
        return 1
    } else if (value1 > value2) {
        return -1
    } else {
        return 0
    }
}
let arr = [2,6,12,9,4]
console.log(arr.sort(compare))   // [12, 9, 6, 4, 2]

案例三:

简写正序

let arr = [2,6,12,9,4]
console.log(arr.sort((a,b) => a < b ? -1 : a > b ? 1 : 0))   // [2, 4, 6, 9, 12]

2.8 操作方法

2.8.1 concat() 数组连接,字符串连接

案例一:
let arr = ['Hello']
console.log(arr.concat('world'))  // ['Hello', 'world']
案例二:
let arr = 'Hello'
console.log(arr.concat('world'))   // Helloworld

2.8.2 slice() 裁剪,返回裁剪后的数组。原有数组保持不变

案例一:
let arr = ['h','e','l','l','o']
console.log(arr.slice(1,2))  // ['e']
console.log(arr)  // ['h', 'e', 'l', 'l', 'o']

2.8.3 splice() 支持删除,插入,替换

案例一:删除

返回删除后的数组,原有数组被改变

  • 参数一:起始位置

  • 参数二:删除的数量

let arr = ['h','e','l','l','o']
console.log(arr.splice(1,2))  // ['e', 'l']
console.log(arr) // ['h', 'l', 'o']
案例二:插入(1)
  • 参数一:起始位置

  • 参数二:删除的数量

  • 参数三:需要插入的元素

let arr = ['h','e','l','l','o']
console.log(arr.splice(1,0,'哈哈','是的')) // []
console.log(arr)  // ['h', '哈哈', '是的', 'e', 'l', 'l', 'o']
案例三:替换
let arr = ['h','e','l','l','o']
console.log(arr.splice(1,2,'哈哈','是的'))  // ['e', 'l']
console.log(arr)  // ['h', '哈哈', '是的', 'l', 'o']

2.8.4 搜索

indexOf()lastIndexOf()includes()

  • 参数一:要查找的元素

  • 参数二:起始查找的位置

indexOf()includes()从数组前头向后搜索,返回要查找元素在数组中的位置,如果没找到则返回-1,

lastIndexOf() 从数组末尾(最后一项)开始向前搜索,返回布尔值,至少找到一个与指定元素匹配的项;使用全等(===)与数组元素进行比较;

案例一:indexOf()查找元素
let arr = ['h','e','l','l','o']
console.log(arr.indexOf('l'))  // 2
console.log(arr) // ['h', 'e', 'l', 'l', 'o']  原有数组保持不变
案例二:includes()查找元素
let arr = ['h','e','l','l','o']
console.log(arr.includes('l')) // true
// 查找不存在的元素,返回false
console.log(arr.includes('ooo'))  // false
案例三:lastIndexOf()
let arr = ['h','e','l','l','o']
console.log(arr.lastIndexOf('ooo')) // -1   如果没找到则返回-1
​
console.log(arr.lastIndexOf('o'))  // 4  返回元素的下标

在学习《JavaScript高级程序设计(第4版)》时的简单笔记。

引用类型的这章内容比较多,先记录一部分。

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

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

相关文章

android studio avd设置中文输入法和时间

设置语言 打开avd 找到设置 找到语言 找到系统语言 把中文移动到第一个就是默认语言了 如果想删除英文可以点击三个点有个移除 随便找个输入框&#xff0c;默认就是中文了 设置时间 点击设置->系统->日期和时间 关掉自动设置 选择一下时区为上海即可

【Datawhale X 李宏毅苹果书 AI夏令营】深度学习自适应学习率(AdaGrad/RMSProp/Adam)及其调度

1、自适应学习率 理论上&#xff1a;在训练一个网络&#xff0c;训练到现在参数在临界点附近&#xff0c;再根据特征值的正负号判断该 临界点是鞍点还是局部最小值实际上&#xff1a;①在训练的时候&#xff0c;要走到鞍点或局部最小值非常困难&#xff1b;②多数还未走到临界…

第十周:机器学习笔记

第十周机器学习周报 摘要Abstract机器学习——self-attention&#xff08;注意力机制&#xff09;1. 为什么要用self-attention2. self-attention 工作原理2.1 求α的两种方式2.2 attention-score&#xff08;关联程度&#xff09; Pytorch学习1. 损失函数代码实战1.1 L1loss&a…

EmguCV学习笔记 VB.Net 8.4 pyrMeanShiftFiltering

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

如何构建大型超市数据处理系统?Java SpringBoot搭配MySQL,实现高效数据管理!

&#x1f34a;作者&#xff1a;计算机毕设匠心工作室 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目…

深入了解Pod(一)

一、pod的配置文件 Pod配置文件的属性说明 属性名称 取值类型 是否必须 取值说明 version String √ 版本号 &#xff0c;例如V1 kind String √ Pod metadata Object √ 元数据 metadata.name String √ Pod名称 metadata.namespace String √…

分销渠道|中小企业可以有推广计划吗?

大家好&#xff0c;我是林叔&#xff0c;专注于分享SaaS企业渠道分销的实战经验。今天&#xff0c;我们来聊聊一个常被中小企业主忽视但极具潜力的营销策略——推广计划。很多人可能觉得推广计划是大企业的专利&#xff0c;但实际上&#xff0c;对于中小企业而言&#xff0c;它…

pycharm怎样关联anaconda虚拟环境.conda executable not found

刚下载的pycharm和anaconda怎样进行关联。 打开pycharm时&#xff0c;点击右侧的conda环境时&#xff0c;出现anaconda.conda executable not found&#xff0c;说明你的anaconda和pycharm没有进行关联。 第一步&#xff1a;重启电脑 第二步&#xff1a;点击圆圈中的文件夹按…

laravel8快速开发简单博客系统(二)

目录 一、创建文章增删改成提交的控制器 1、注释文章查看权限&#xff0c;非登录状态可以查看文章列表页 2、创建提交控制器post 3、创建数据表 4、创建提交post资源路由 5、创建post控制器view目录post 二、文章添加功能实现 1.模板显示 2.复制home.blade.php模板到po…

Django+Vue宠物服务管理系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 需要的环境3.2 Django接口层3.3 实体类3.4 config.ini3.5 启动类3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质创作者&…

探讨离线AI知识库的技术实现:AntSKPro AI 离线知识库一体机

在现代社会&#xff0c;离线AI解决方案越来越受到关注。最近我接触到一款名为AntSKPro AI 离线知识库一体机的设备&#xff0c;它能在没有网络连接的情况下提供强大的AI支持。这里我想分享一下这款设备的一些技术亮点和使用体验。 技术架构与实现 AntSKPro AI 离线知…

Java 并发编程解析 | 如何正确理解Java领域中的内存模型,主要是解决了什么问题?

苍穹之边&#xff0c;浩瀚之挚&#xff0c;眰恦之美&#xff1b; 悟心悟性&#xff0c;善始善终&#xff0c;惟善惟道&#xff01; —— 朝槿《朝槿兮年说》 写在开头 这些年&#xff0c;随着CPU、内存、I/O 设备都在不断迭代&#xff0c;不断朝着更快的方向努力。在这个快速发…

探索Python测试的奥秘:nose库的魔法之旅

文章目录 探索Python测试的奥秘&#xff1a;nose库的魔法之旅1. 背景&#xff1a;为什么要用nose&#xff1f;2. nose是什么&#xff1f;3. 如何安装nose&#xff1f;4. 五个简单的库函数使用方法4.1 nose.tools.assert_true4.2 nose.tools.assert_equal4.3 nose.tools.raises4…

【通过h5作为中转页跳转到微信小程序】

1。从小程序跳转小程序内部页面 <!DOCTYPE html> <html><head><title>H5跳转小程序</title><meta charset"UTF-8"><meta name"viewport"content"widthdevice-width, initial-scale1.0, minimum-scale1.0, ma…

解释:某树的孩子兄弟链是什么意思?

&#x1f31f; 嗨&#xff0c;我是命运之光&#xff01; &#x1f30d; 2024&#xff0c;每日百字&#xff0c;记录时光&#xff0c;感谢有你一路同行。 &#x1f680; 携手启航&#xff0c;探索未知&#xff0c;激发潜能&#xff0c;每一步都意义非凡。 孩子兄弟链&#xff…

280Hz显示器 - HKC G27H3显示器

280Hz显示器 - HKC G27H3显示器 当电竞遇上显示器&#xff0c;就像是超级英雄找到了他的战衣&#xff0c;完美搭配&#xff0c;所向披靡。今天&#xff0c;我们要聊的这款HKC G27H3显示器&#xff0c;简直就是电竞界的"速度与激情"&#xff0c;让我们来看看它如何成为…

HANA5 游戏逆向

前言 某著名百合R18游戏 以前尝试逆过一次&#xff0c;半途而废了。今天想起来再逆一下&#xff0c;记录下逆向的过程。 游戏文件结构&#xff1a; 游戏资源extract 主要目标是弄明白游戏资源&#xff1a;SE、CG这些怎么加载解密的。 还是像万华镜那样下三个API断点&…

windows下载安装Node.js 并切换镜像地址

一、 windows下载Node.js Node.js官方安装包及源码下载地址为&#xff1a;https://nodejs.org/en/download/。 如果下载过慢可以使用nullhttps://nodejs.cn/download/ 下载对应版本 二、安装 双击安装包 全部点next即可 三、测试是否安装成功 打开命令窗口查看node版本 …

Unity SceneView 相机聚焦到指定位置

SceneView 相机聚焦到指定位置 SceneView.lastActiveSceneView.LookAt(pos);

书生大模型实战营基础(5)——XTuner 微调个人小助手认知任务

目录 1 、微调前置基础 2、准备工作 2.1环境配置 结果 2.2模型准备 目录结构&#xff1a;在目录结构中可以看出&#xff0c;internlm2-chat-1_8b 是一个符号链接 3、快速开始 3.1 微调前的模型对话 获取开发机端口和密码&#xff1a; 3.2 指令跟随微调 3.2.1 准备数…