JS基础 -- 数组 (对象 / 数组 / 类数组 / 对象数组)的遍历

一、数组:

数组是复杂数据类型,用于存储一组有序的数据。

1、创建数组:

① 使用 new 关键字:

let arr = new Array() // 创建一个长度为0的空数组
let arrLength = new Array(5) // 创建一个长度为5的空数组

② 字面量形式:

let arr = [] // 创建一个长度为0的空数组

2、给数组中添加数据:

① 创建的数组的时候,直接初始化数据:

let arrEle = ['1', 2, true]

② 通过索引添加数据:

let arr = []
arr[0] = 1
arr[arr.length] = 2

二、遍历:

1、数组:

for循环

let arr=[1,2,3,4,5,6]
for(let i =0;i <arr.length;i++) {console.log('正向遍历',arr[i])
}
for(let i =arr.length-1;i >=0;i--) {console.log('反向遍历',arr[i])
}

forEach :与for循环相比,更适用于遍历次数未知的情况。

没有返回值,不会改变原始数组

let arr=[1,2,3,4,5,6]
arr.forEach((item,index,originArr)=>{console.log('元素,索引 ---》',item,index)console.log('原始数组',originArr)
})

map:有返回值,返回的是新数组,不会改变原始数组

let arr=[1,2,3,4,5,6]
let a = arr.map((item,index,originArr)=>{console.log('元素,索引 ---》',item,index)console.log('原始数组',originArr)// 默认返回的是 undefinedreturn 'haha'+item
})
console.log('得到的新数组a',a)

for- of:用来遍历可迭代对象

let arr = ['张三','李四','王五','赵六','钱七','孙八','周九','吴十']
for(let value of arr) {console.log('元素-->', value) // 张三...
}

2、类数组:

当我们想要获取多个DOM节点,并对每一个DOM节点都进行操作时,就需要使用类数组的遍历。

for循环:比较耗性能,一般不用

② slice和call将类数组转化为数组

[ ]表示数组的实例,[ ].slice表示将数组整个进行返回,call表示将作用域提升到

document.getElementsByClassName(“modify__quarter-date”)
这个类数组中。

③ ES6中的...(扩展运算符)

for- of:用来遍历可迭代对象

3、对象:

for- in

for-in 会遍历数组里的原型链中的属性,需要使用 Object.hasOwn 或者 hasOwnProperty 来检测属性是否来自原型链。

let obj = {name:'张三',age: 52,address: '家庭住址'
}
for(let key in obj) { // key表示对象的键名console.log(obj[key]) // 得到对象的键值
}

Object.keys():得到一个以对象的索引组成的数组

let obj = {name:'张三',age: 52,address: '家庭住址'
}
console.log(Object.keys(obj)) // ['name', 'age', 'address']

Object.values():得到一个以对象的值组成的数组

let obj = {name:'张三',age: 52,address: '家庭住址'
}
console.log(Object.values(obj)) // ['张三', 52, '家庭住址']

Object.getOwnPropertyNames():得到一个以对象的索引组成的数组(包括原型上的属性)

let obj = {name:'张三',age: 52,address: '家庭住址'
}
console.log(Object.keys(obj)) // ['name', 'age', 'address']

4、对象数组:

for循环

class Person {constructor(name,age) {this.name=namethis.age=age}
}
let arr=[new Person('张三',20),new Person('李四',40),new Person('王五',60),
]
for(let i =0;i <arr.length;i++) {let age = arr[i].ageif (age>50) {console.log('年龄大于50的人',arr[i])}
}

forEach :与for循环相比,更适用于遍历次数未知的情况。

没有返回值,不会改变原始数组

class Person {constructor(name,age) {this.name=namethis.age=age}
}
let arr=[new Person('张三',20),new Person('李四',40),new Person('王五',60),
]
arr.forEach((item,index,originArr)=>{console.log('元素,索引 ---》',item,index)console.log('原始数组',originArr)
})

map:有返回值,返回的是新数组,不会改变原始数组

class Person {constructor(name,age) {this.name=namethis.age=age}
}
let arr=[new Person('张三',20),new Person('李四',40),new Person('王五',60),
]
let a = arr.map((item,index,originArr)=>{console.log('元素,索引 ---》',item,index)console.log('原始数组',originArr)// 默认返回的是 undefinedreturn 'haha'+item.name
})
console.log('得到的新数组a',a)

for- of:用来遍历可迭代对象

class Person {constructor(name,age) {this.name=namethis.age=age}
}
let arr=[new Person('张三',20),new Person('李四',40),new Person('王五',60),
]
for(let value of arr) {console.log('元素--》',value)
}

5、性能:for循环 > for...of > forEach > for...in > map

三、数组中的方法:

这部分还在更新,以下数据不正确

1、slice和splice:数组中截取数据。

slice

  • 不影响原数组。
  • 包含开始索引、不包含结束索引。
  • slice(1, -2) // 表示从索引1开始截取,从倒数第二个元素结束截取。

splice

  • 影响原数组。
  • splice(1, 2) // 表示从索引1开始截取,截取2个元素。
  • splice(1, 1, “替换的第1个元素”, “替换的第2个元素”, “替换的第3个元素”) // 表示替换索引1的元素
  • splice(1, 0, “新增的第1个元素”, “新增的第2个元素”, “新增的第3个元素”) // 表示在索引1后面新增元素
    在这里插入图片描述
    在这里插入图片描述

2、call和apply:

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

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

相关文章

利用 AI 高效生成思维导图的简单实用方法

#工作记录 适用于不支持直接生成思维导图的AI工具&#xff1b;适用于AI生成后不能再次编辑的思维导图。 在日常的学习、工作以及知识整理过程中&#xff0c;思维导图是一种非常实用的工具&#xff0c;能够帮助我们清晰地梳理思路、归纳要点。而借助 AI 的强大能力&#xff0c…

嵌入式学习(21)-正点原子脱机下载器Mini-Pro的使用

一、概述 通过脱机下载器可以脱离电脑给电路板下载程序&#xff0c;方便在产线上给PCB烧录程序。 二、程序烧录到脱机下载器 1、驱动及软件下载&#xff1a; https://download.csdn.net/download/A18763139629/90215719 2、软件安装 3、烧录程序 通过USB线与脱机下载器连…

二维码文件在线管理系统-收费版

需求背景 如果大家想要在网上管理自己的文件&#xff0c;而且需要生成二维码&#xff0c;下面推荐【草料二维码】&#xff0c;这个系统很好。特别适合那些制造业&#xff0c;实体业的使用手册&#xff0c;你可以生成一个二维码&#xff0c;贴在设备上&#xff0c;然后这个二维码…

【C语言程序设计——循环程序设计】枚举法换硬币(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 相关知识 一、循环控制 / 跳转语句的使用 1. 循环控制语句&#xff08;for 循环&#xff09; 2. 循环控制语句&#xff08;while 循环&#xff09; 3. 跳转语句&#xff08;break 语句&#xff09; 4. 跳转语句&#xff08;continue 语句&…

【Multisim用74ls92和90做六十进制】2022-6-12

缘由Multisim如何用74ls92和90做六十进制-其他-CSDN问答 74LS92、74LS90参考

计算机的错误计算(二百)

摘要 用三个大模型计算 exp(123.456). 结果保留10位有效数字。三个大模型的输出均是错误的&#xff0c;虽然其中一个给出了正确的 Python代码。 例1. 计算 exp(123.456). 保留10位有效数字。 下面是与第一个大模型的对话。 以上为与一个大模型的对话。 下面是与另外一个大模…

自行下载foremos命令

文章目录 问题描述其他小伙伴的成功解决方案&#xff0c;但对我不适用解决思路失败告终 最终解决成功解决思路解决步骤 问题描述 在kali系统终端中输入foremost&#xff0c;显示无此命令 其他小伙伴的成功解决方案&#xff0c;但对我不适用 解决思路 正常来说使用命令 apt-g…

docker 安装influxdb

docker pull influxdb mkdir -p /root/influxdb/data docker run -d --name influxdb -p 8086:8086 -v /root/influxdb/data:/var/lib/influxdb influxdb:latest#浏览器登录&#xff1a;http://192.168.31.135:8086&#xff0c;首次登录设置用户名密码&#xff1a;admin/admin1…

Leetcode打卡:我的日程安排表II

执行结果&#xff1a;通过 题目 731 我的日程安排表II 实现一个程序来存放你的日程安排。如果要添加的时间内不会导致三重预订时&#xff0c;则可以存储这个新的日程安排。 当三个日程安排有一些时间上的交叉时&#xff08;例如三个日程安排都在同一时间内&#xff09;&#…

创龙3588——debian根文件系统制作

文章目录 build.sh debian 执行流程build.sh源码流程 30-rootfs.sh源码流程 mk-rootfs-bullseys.sh源码流程 mk-sysroot.sh源码流程 mk-image.sh源码流程 post-build.sh 大致流程系统制作步骤 build.sh debian 执行流程 build.sh 源码 run_hooks() {DIR"$1"shiftf…

拟声 0.60.0 | 拟态风格音乐播放器,支持B站音乐免费播放

「拟声」是一款音乐播放器&#xff0c;不仅支持音视频的本地播放&#xff0c;还提供了账号注册功能&#xff0c;登录后可享受自动同步歌单、歌词等。它支持播放绝大多数音频格式&#xff0c;具备固定输出采样率、独占输出、内置均衡器和音调调整等功能。同时&#xff0c;它也支…

计算机网络 (16)数字链路层的几个共同问题

一、封装成帧 封装成帧是数据链路层的一个基本问题。数据链路层把网络层交下来的数据构成帧发送到链路上&#xff0c;以及把接收到的帧中的数据取出并上交给网络层。封装成帧就是在一段数据的前后分别添加首部和尾部&#xff0c;构成了一个帧。接收端在收到物理层上交的比特流后…

Linux Shell 脚本编程基础知识篇—awk的条件判断(3)

ℹ️大家好&#xff0c;我是练小杰&#xff0c;今天周五了&#xff0c;又是一周过去了&#x1f606; 本文是有关Linux shell脚本编程的awk命令的条件语句&#xff0c;后续我会不断增加相关内容 ~~ 回顾:【awk字符串函数和内置变量】 更多Linux 相关内容请点击&#x1f449;【Li…

小程序学习07—— uniapp组件通信props和$emit和插槽语法

目录 一 父组件向子组件传递消息 1.1 props &#xff08;a&#xff09;传递静态或动态的 Prop &#xff08;b&#xff09;单向数据流 二 子组件通知父组件 2.1 $emit &#xff08;a&#xff09;定义自定义事件 &#xff08;b&#xff09;绑定自定义事件 三 插槽语法…

【深度学习进阶】基于CNN的猫狗图片分类项目

介绍 基于卷积神经网络&#xff08;CNN&#xff09;的猫狗图片分类项目是机器学习领域中的一种常见任务&#xff0c;它涉及图像处理和深度学习技术。以下是该项目的技术点和流程介绍&#xff1a; 技术点 卷积神经网络 (CNN): CNN 是一种专门用于处理具有类似网格结构的数据的…

【pytorch-lightning】架构一览

pytorch-lightning是基于pytorch的一个套壳项目&#xff0c;适配pytorch的版本同步更新速度很快。 它将训练的几个主要流程模块化&#xff0c;减少重复工作&#xff0c;同时让支持分布式训练&#xff0c;不同平台的训练迁移变得更加简单。 官网链接

AWS K8s 部署架构

Amazon Web Services&#xff08;AWS&#xff09;提供了一种简化的Kubernetes&#xff08;K8s&#xff09;部署架构&#xff0c;使得在云环境中管理和扩展容器化应用变得更加容易。这个架构的核心是AWS EKS&#xff08;Elastic Kubernetes Service&#xff09;&#xff0c;它是…

【Vue】vue项目中命名规范(结合上一篇项目结构)

组件命名规范&#xff1a; 多单词命名&#xff1a; 避免使用单个单词命名组件&#xff0c;因为这可能会导致命名冲突。相反&#xff0c;应该使用描述性的多单词命名&#xff0c;如 UserProfile、SettingsPanel 等。 使用帕斯卡命名法&#xff1a; 组件名称应该以大写字母开头&…

node.js之---事件循环机制

事件循环机制 Node.js 事件循环机制&#xff08;Event Loop&#xff09;是其核心特性之一&#xff0c;它使得 Node.js 能够高效地处理大量并发的 I/O 操作。Node.js 基于 非阻塞 I/O&#xff0c;使用事件驱动的模型来实现异步编程。事件循环是 Node.js 实现异步编程的基础&…

信息科技伦理与道德1:绪论

1 问题描述 1.1 信息科技的进步给人类生活带来的是什么呢&#xff1f; 功能&#xff1f;智能&#xff1f;陪伴&#xff1f;乐趣&#xff1f;幸福&#xff1f; 基于GPT-3的对话Demo DeepFake 深伪技术&#xff1a;通过神经网络技术进行大样本学习&#xff0c;将个人的声音、面…