JavaScript 数组

JavaScript 数组

用来存储一系列相关数据的一种数据类型

创建数组

  • 字面量方式 ----- [1,2,3,4,5,6];
  • 实例化构造函数 ----- new Array(1,2,3,4,5,6);
  • 组成数组的元素可以是任意的数据类型包括数组本身;

    new Array(n): n 表示数组的长度

内容操作

  • 获取(查询) 下标 arr[0]; 如果某个下标没有对应内容会得到 undefined
  • 修改/添加 arr[0]=100;

内容遍历

  • for 循环 while(){}

过滤数组

let gradeArr=[98,85,65,32,89,100,65,45,65,91]

  • 使用 filter 方法:这是最直观的方法,filter 方法创建一个新数组,新数组包含通过所提供函数实现的测试的所有元素。
let passedGrades = gradeArr.filter(function (grade) {return grade >= 60 // 假设及格分数线是60
})
// 使用箭头函数简化
let passedGrades = gradeArr.filter(grade => grade >= 60)
  • 使用 for 循环:传统的方法,遍历数组并将符合条件的元素添加到新数组中。
let passedGrades = []
for (let i = 0; i < gradeArr.length; i++) {if (gradeArr[i] >= 60) {passedGrades.push(gradeArr[i])}
}
  • 使用 forEach 方法:类似于 for 循环,但是是数组的内置方法。
let gradeArr = [98, 85, 65, 32, 89, 100, 65, 45, 65, 91]
let passedGrades = []
gradeArr.forEach(function (grade) {if (grade >= 60) {passedGrades.push(grade)}
})
  • 使用 reduce 方法:reduce 方法对数组中的每个元素执行一个由您提供的“reducer”回调函数,结果是单个输出值,在这里可以累积所有符合条件的元素。
let gradeArr = [98, 85, 65, 32, 89, 100, 65, 45, 65, 91]
let passedGrades = gradeArr.reduce(function (acc, grade) {if (grade >= 60) {acc.push(grade)}return acc
}, [])
  • 使用 for…of 循环:ES6 引入的新循环语法,可以直接遍历数组的值。
let gradeArr = [98, 85, 65, 32, 89, 100, 65, 45, 65, 91]
let passedGrades = []
for (let grade of gradeArr) {if (grade >= 60) {passedGrades.push(grade)}
}

查找

let gradeArr=[98,85,65,32,89,100,65,45,65,91]

  • 使用 find 方法:这个方法返回数组中满足提供的测试函数的第一个元素的值。如果没有找到符合条件的元素,则返回 undefined。
let foundGrade = gradeArr.find(function (grade) {return grade === 65 // 假设我们要找的成绩是65
})
// 使用箭头函数简化:let foundGrade = gradeArr.find(grade => grade === 65)
  • 使用 indexOf 方法:这个方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。
let index = gradeArr.indexOf(65) // 找到65的索引
  • 使用 findIndex 方法:与 find 类似,但是返回的是数组中找到的元素的索引,而不是元素本身。如果没有找到,则返回-1。
let index = gradeArr.findIndex(grade => grade === 65)
  • 使用 includes 方法:这个方法用来判断数组是否包含一个指定的值,根据情况返回 true 或 false。
let isPresent = gradeArr.includes(65) // 判断65是否在数组中
  • 使用 for 循环:传统的方法,遍历数组并检查每个元素是否满足条件。
let foundGrade = null
for (let i = 0; i < gradeArr.length; i++) {if (gradeArr[i] === 65) {foundGrade = gradeArr[i]break // 找到后退出循环}
}
  • 使用 forEach 方法:这个方法遍历数组的每个元素,但它不能像 for 循环那样在找到元素后立即停止。
let foundGrade = null
gradeArr.forEach(function (grade) {if (grade === 65 && foundGrade === null) {foundGrade = grade}
})
  • 使用 for…of 循环:ES6 引入的新语法,可以直接遍历数组的值。
let foundGrade = null
for (let grade of gradeArr) {if (grade === 65) {foundGrade = gradebreak // 找到后退出循环}
}
  • 使用 some 方法:这个方法测试数组中是不是至少有一个元素通过了被提供的函数测试。它返回的是一个布尔值。
let exists = gradeArr.some(grade => grade === 65) // 检查是否至少有一个65

判断

let gradeArr=[98,85,65,32,89,100,65,45,65,91]

  • 使用 includes 方法:判断数组是否包含某个特定的值。
let hasGrade = gradeArr.includes(65) // 返回true,因为数组中包含65
  • 使用 some 方法:判断数组中至少有一个元素满足提供的函数。
let hasPassingGrade = gradeArr.some(grade => grade >= 60) // 返回true,如果至少有一个成绩及格(假设60分及格)
  • 使用 every 方法:判断数组中的所有元素是否都满足提供的函数。
let allPassingGrades = gradeArr.every(grade => grade >= 60) // 返回false,因为不是所有成绩都及格
  • 使用 indexOf 方法:查找数组中某个特定值的第一个索引,如果该值存在于数组中,则返回其索引,否则返回-1。
let index = gradeArr.indexOf(65) // 返回2,因为65第一次出现在数组的第三个位置(索引为2)
let hasGrade = index !== -1 // 如果index不等于-1,说明数组中有65
  • 使用 find 方法:查找数组中满足测试函数的第一个元素的值,如果存在这样的元素,则返回该值,否则返回 undefined。
let foundGrade = gradeArr.find(grade => grade === 65) // 返回65,因为数组中存在65
let hasGrade = foundGrade !== undefined // 如果foundGrade不是undefined,则说明数组中有65
  • 传统的循环方法:使用 for、for…of 或 forEach 循环遍历数组并进行条件判断。
let hasGrade = false
for (let i = 0; i < gradeArr.length; i++) {if (gradeArr[i] === 65) {hasGrade = truebreak // 找到后退出循环}
}
// 使用for...of循环:let hasGrade = false
for (let grade of gradeArr) {if (grade === 65) {hasGrade = truebreak // 找到后退出循环}
}

排序

let gradeArr=[98,85,65,32,89,100,65,45,65,91]

  • 默认排序
gradeArr.sort() // 注意:这会按照字符串的顺序进行排序,可能不是数值大小的顺序
gradeArr.sort((a, b) => a - b) //数值升序排序
gradeArr.sort(function (a, b) {return a - b
}) // 数值降序排序
let sortedGrades = gradeArr.map(grade => grade).sort((a, b) => a - b) // 如果你需要保持原数组不变,可以先使用map方法创建数组副本,然后在副本上调用sort。
  • 冒泡排序
for (let i = 0; i < gradeArr.length; i++) {// 内层循环遍历数组,-i的原因是最后i个已经排序好了for (let j = 0; j < gradeArr.length - 1 - i; j++) {// 相邻元素两两对比if (gradeArr[j] > gradeArr[j + 1]) {//  如果当前元素大于它右边的元素,则交换它们let temp = gradeArr[j]gradeArr[j] = gradeArr[j + 1]gradeArr[j + 1] = temp}}
}
console.log(gradeArr)
  • 选择排序
// 选择排序
for (let i = 0; i < gradeArr.length - 1; i++) {//min代表的是最小值所在的位置let min = i // 检查数组其余部分for (let j = i + 1; j < gradeArr.length; j++) {// 如果发现更小的值if (gradeArr[min] > gradeArr[j]) {// 更新最小值的索引min = j}}// 如果最小值不是当前位置,交换这两个值if(min!==i) {let temp = gradeArr[i]gradeArr[i] = gradeArr[min]gradeArr[min] = temp}}
console.log(gradeArr)
  • 插入排序
// 插入排序
for (let i = 1; i < gradeArr.length; i++) {let temp = gradeArr[i]// 当前要插入的元素let j = i - 1// 将当前元素与已排序部分的元素比较,如果当前元素小于已排序部分的元素,则将已排序元素向后移动while (j >= 0 && temp < gradeArr[j]) {// 已排序元素向后移动gradeArr[j + 1] = gradeArr[j]j--}// 将当前元素插入到正确的位置gradeArr[j + 1] = temp
}
console.log(gradeArr)
  • 快速排序

去重

  • 使用 Set 数据结构:Set 是 ES6 中的一种数据结构,它只存储唯一的值。我们可以将数组转换为 Set,然后再将 Set 转换回数组,这样就可以实现去重。
let arr = [1, 2, 3, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7, 8];
let uniqueArr = Array.from(new Set(arr));
console.log(uniqueArr); // [1, 2, 3, 4, 5, 6, 7, 8]
  • 使用 Array.prototype.filter() 方法:我们可以使用 filter 方法对数组进行筛选,只保留第一次出现的元素,过滤掉后续重复的元素。
let arr = [1, 2, 3, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7, 8];
let uniqueArr = arr.filter((value, index, self) => {return self.indexOf(value) === index;
});
console.log(uniqueArr); // [1, 2, 3, 4, 5, 6, 7, 8]
  • 使用对象键值对:我们可以遍历数组,将数组的元素作为对象的键,值可以是任意非重复的值。最后,提取对象的键即可得到去重后的数组。
let arr = [1, 2, 3, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7, 8];
let uniqueArr = Object.keys(arr.reduce((obj, currentValue) => {obj[currentValue] = true;return obj;}, {})
);
console.log(uniqueArr); // ["1", "2", "3", "4", "5", "6", "7", "8"]
  • 使用 Array.prototype.includes() 方法:我们可以遍历数组,使用 includes 方法判断当前元素是否已经存在于结果数组中,如果不存在则添加到结果数组中。
let arr = [1, 2, 3, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7, 8];
let uniqueArr = [];
arr.forEach((value) => {if (!uniqueArr.includes(value)) {uniqueArr.push(value);}
});
console.log(uniqueArr); // [1, 2, 3, 4, 5, 6, 7, 8]

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

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

相关文章

LLM之Agent(四)| AgentGPT:一个在浏览器运行的Agent

AgentGPT是一个自主人工智能Agent平台&#xff0c;用户只需要为Agent指定一个名称和目标&#xff0c;就可以在浏览器中链接大型语言模型&#xff08;如GPT-4&#xff09;来创建和部署Agent平台。 PS&#xff1a;目前agentGPT仅支持chatgpt模型&#xff0c;暂时不支持本地llm模…

怎么让CMake不使用VS作为构建工具,而是使用gcc

2023年12月5日&#xff0c;周二晚上 要让 CMake 使用 gcc 而不是 Visual Studio 作为构建工具&#xff0c;可以通过指定生成器来告诉 CMake 使用 gcc。 在运行 cmake 命令时&#xff0c;可以使用 -G 参数来指定生成器。 对于 gcc&#xff0c;可以使用 "Unix Makefiles&q…

调查显示 IT 服务事件越来越频繁

事件管理平台提供商 Transposit 对美国 1,000 名 IT 运营、DevOps、站点可靠性工程 (SRE) 和平台工程专业人士进行的一项调查发现&#xff0c;超过三分之二 (67%) 的人发现故障率有所增加过去 12 个月中影响客户的服务事件的频率。 今天在Kubecon CloudNative会议上宣布的调查…

102.套接字-Socket网络编程4(TCP通信流程)

目录 TCP编程流程 套接字函数 1.创建套接字 2.绑定地址 3.监听连接请求 4.接受连接 5. 连接到服务器 6. 发送数据 7. 接收数据 8.关闭套接字 服务器端通信流程 示例代码 客户端通信流程 代码示例 TCP编程流程 TCP是一个面向连接的&#xff0c;安全的&#xff0c;流…

【Java技术专题】「入门到精通系列教程」深入探索Java特性中泛型技术体系的原理和实战开发指南

深入探索Java特性中泛型技术体系的原理和实战开发指南 前提介绍泛型的介绍泛型带来的好处泛型引发的问题错觉&#xff1a;泛型也可以实现多态 泛型的特点类型擦除概念定义案例分析隐患问题开发要点类型擦除的过程案例代码 实例分析类型转换问题 通配符与上下界通配符List<Ob…

在线测量大尺寸管材的测径仪有哪些?

工业高速发展的背后&#xff0c;离不开与之匹配的高端设备作为科研的支撑。品质检测仪器也在随着现代科技的发展而不断变化&#xff0c;随着科技的进步&#xff0c;各种大口径的管材、管道被生产制造出来&#xff0c;而对其外径尺寸的检测则因口径范围大而使得很少有仪器能进行…

美股电动汽车股票分析:蔚来和Rivian这两只都遭受了重创的股票,哪个更值得投资?

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 Rivian(RIVN)和蔚来(NIO)都是目前美股市场上最受关注的电动汽车股票。虽然蔚来在全球最大的电动汽车市场中国扮演着重要角色&#xff0c;但Rivian也击败了很多传统汽车制造商&#xff0c;并成为了第一家在美国推出全电动皮…

github可访问但无法clone问题

github可访问但无法clone问题 重置 http.proxy 重置 http.proxy git config --global http.proxy http://127.0.0.1:1080 git config --global https.proxy https://127.0.0.1:1080 git config --global --unset http.proxy git config --global --unset https.proxy

MongoDB的学习记录

目录 MongoDB是什么MongoDB为什么存在MongoDB怎么用MongoDB解决什么MongoDB指令开发使用的mongoose模块讲解请看这篇文章 MongoDB是什么 MongoDB是一种开源的、面向文档的NoSQL数据库管理系统。它使用JSON格式来存储数据&#xff0c;具有高可扩展性、高性能、高可用性等特点&a…

css设置渐变色

css如何设置自定义渐变色&#xff1f;线性渐变篇 CSS渐变可以让你在两个或多个指定颜色之间显示平滑的过渡。 CSS定义了三种渐变类型: Linear Gradients (goes down/up/left/right/diagonally) 下降/ 上升/左/右/对角线Radial Gradients (defined by their center) 由中心定…

Python内置函数 — super

1、super() 是一个Python内置函数&#xff0c;用于调用父类的方法。通过调用super()返回的对象的方法&#xff0c;可以在子类中访问父类的属性和方法&#xff0c;并在需要的情况下进行扩展或修改。 super()函数的一般语法是super().method()&#xff0c;其中method是父类中的…

WeakMap

WeakMap简介 作为es6一种新的数据结构&#xff0c;他是一种键值对的集合。与Map最大的区别有两个 1. 是其中的键必须是对象或非全局注册的符号。 全局注册的符号 const s1 Symbol.for(mySymbol) 非全局注册的符号 const s1 Symbol(mySymbol)了解Symbol.for 2. 不会创建对它…

黑苹果之机箱篇

上一篇写过关于配置的总的文章&#xff0c;今天咱们来聊一下机箱的选择 关于机箱的选择主要是尺寸和功能了 一、尺寸 电脑主机机箱尺寸因品牌、型号不同而异&#xff0c;常见的机箱尺寸有以下几种&#xff1a; 1. ATX机箱尺寸&#xff1a;长约44.5cm&#xff0c;宽约20.5cm&…

Example: use raspberry pi 4 control multiple motors(tb660)

abstract This is a project for controlling multiple motors by using joystick, the buttons’ information can be obtained from topic “/joystick”. We got the sensor’s signals from arduino, and sent the command from topic “joystick”. raspberry pi code(p…

在Docker容器中启用SSH服务,实现外部访问的详细教程

目录 步骤 1: 安装 SSH 服务器 步骤 2: 配置 SSH 服务器 步骤 3: 设置 SSH 用户 步骤 4: 重启 SSH 服务器 步骤 5: 映射容器端口 步骤 6: 使用 SSH 连接到容器 要在Docker容器中启用SSH服务&#xff0c;以便从外部访问&#xff0c;您需要执行以下步骤&#xff1a; 步骤 …

面试就是这么简单,offer拿到手软(三)—— 常见中间件框架面试题,es,redis,dubbo,zookeeper kafka 等

面试就是这么简单&#xff0c;offer拿到手软&#xff08;一&#xff09;—— 常见非技术问题回答思路 面试就是这么简单&#xff0c;offer拿到手软&#xff08;二&#xff09;—— 常见65道非技术面试问题 面试就是这么简单&#xff0c;offer拿到手软&#xff08;三&#xff…

python-ATM机

编写程序&#xff0c;实现一个具有开户、查询、取款、存款、转账、锁定、解锁、退出功能的银行管理系统。 结果展示 1.Main主方法 from zzjmxy.class7.atm import ATM from zzjmxy.class7.manager import Manager # 主面板&#xff0c;实现主要逻辑if __name__"__main__…

kubectl获取命名空间下所有configmap集合的方法

前言&#xff1a; 获取单个configmap并忽略特定字段的操作可参照&#xff1a;kubectl获取ConfigMap导出YAML时如何忽略某些字段。 要获取命名空间下所有ConfigMap并忽略特定字段&#xff0c;你可以使用kubectl命令与例如yq这样的工具结合使用来忽略或删除不需要的字段。以下是…

「实用场景教程」如何用日程控件DHTMLX Scheduler制作酒店预订日历?(三)

dhtmlxScheduler是一个类似于Google日历的JavaScript日程安排控件&#xff0c;日历事件通过Ajax动态加载&#xff0c;支持通过拖放功能调整事件日期和时间&#xff0c;事件可以按天&#xff0c;周&#xff0c;月三个种视图显示。 DHTMLX Scheduler正式版下载 在本教程中&…

t-SNE方法:

使用t-SNE时&#xff0c;除了指定你想要降维的维度&#xff08;参数n_components&#xff09;&#xff0c;另一个重要的参数是困惑度&#xff08;Perplexity&#xff0c;参数perplexity&#xff09; 困惑度&#xff1a; 困惑度大致表示如何在局部或者全局位面上平衡关注点&am…