js数组相关 一、数组的基本概念数组可以理解成一个箱子用来存放一组数据。一维数组就是一个箱子或多个箱子。二维数组就是一个箱子里面套了一个箱子。以此类推多维数组就是箱子层层嵌套。例如创建一个一维数组var arr [1, 2, 3, 4, 5]; console.log(arr); // 输出 [1, 2, 3, 4, 5]创建一个二维数组var matrix [ [1, 2], [3, 4], [5, 6] ]; console.log(matrix[0][1]); // 输出 2二、数组的遍历遍历数组可以使用 for 循环或 while 循环。使用 for 循环遍历var username [张三, 李四, 王五]; for (var i 0; i username.length; i) { console.log(username[i]); }使用 for...in 遍历遍历下标for (var index in username) { console.log(index : username[index]); }使用 for...of 遍历遍历元素for (var name of username) { console.log(name); }使用 while 循环遍历var i 0; while (i username.length) { console.log(username[i]); i; }三、数组的静态方法Array.isArray() 用于判断一个对象是否为数组返回布尔值。var arr [1, 2, 3]; console.log(Array.isArray(arr)); // 输出 true console.log(Array.isArray(hello)); // 输出 false四、数组的增删方法push、pop、unshift、shift数组太长的情况下使用这些方法可以方便地在头部或尾部增删元素。push() 在数组末尾加入一个或多个元素返回数组的新长度后加。var arr [1, 2, 3]; var len arr.push(4, 5); console.log(arr); // 输出 [1, 2, 3, 4, 5] console.log(len); // 输出 5pop() 删除数组最后一个元素返回被删除的元素后删。var arr [1, 2, 3]; var last arr.pop(); console.log(arr); // 输出 [1, 2] console.log(last); // 输出 3unshift() 在数组开头加入一个或多个元素返回数组的新长度前加。var arr [1, 2, 3]; var len arr.unshift(a, b); console.log(arr); // 输出 [a, b, 1, 2, 3] console.log(len); // 输出 5shift() 删除数组第一个元素返回被删除的元素前删。var arr [1, 2, 3]; var first arr.shift(); console.log(arr); // 输出 [2, 3] console.log(first); // 输出 1五、数组的常用方法concat() 用于合并多个数组返回一个新数组原数组不变。var arr1 [1, 2]; var arr2 [3, 4]; var arr3 arr1.concat(arr2); console.log(arr3); // 输出 [1, 2, 3, 4]reverse() 颠倒数组元素的顺序会改变原数组。var arr [1, 2, 3, 4]; arr.reverse(); console.log(arr); // 输出 [4, 3, 2, 1]indexOf() 查找元素在数组中的下标存在则返回下标不存在则返回 -1。var arr [a, b, c, d]; console.log(arr.indexOf(c)); // 输出 2 console.log(arr.indexOf(x)); // 输出 -1indexOf() 还可以指定起始查找位置从第二个元素后面开始查找。var arr [a, b, c, b]; console.log(arr.indexOf(b, 2)); // 从下标 2 开始找输出 3split() 用于把字符串按指定分隔符拆分成数组。var str apple,banana,orange; var arr str.split(,); console.log(arr); // 输出 [apple, banana, orange]六、补充其他常用方法join() 把数组元素用指定分隔符合并成字符串与 split() 相反。var arr [apple, banana, orange]; var str arr.join(-); console.log(str); // 输出 apple-banana-orangeslice() 截取数组的一部分返回新数组不改变原数组。var arr [1, 2, 3, 4, 5]; var sub arr.slice(1, 3); console.log(sub); // 输出 [2, 3]splice() 可以删除、替换或插入元素会改变原数组。var arr [1, 2, 3, 4, 5]; arr.splice(1, 2, a, b); // 从下标 1 开始删除 2 个元素再插入 a 和 b console.log(arr); // 输出 [1, a, b, 4, 5]sort() 对数组元素进行排序默认按字符串顺序排序。var arr [3, 1, 4, 2]; arr.sort(); console.log(arr); // 输出 [1, 2, 3, 4]forEach() 遍历数组对每个元素执行一次回调函数是数组遍历中最常用的方法之一。var arr [1, 2, 3]; arr.forEach(function (item) { console.log(item * 2); // 输出 2、4、6 });七、forEach 的详细讲解forEach() 是数组自带的高阶方法它接收一个回调函数数组中的每个元素都会依次调用一次该回调函数。回调函数可以接收三个参数当前元素、当前下标、原数组本身。var arr [a, b, c]; arr.forEach(function (item, index, array) { console.log(元素 item 下标 index); console.log(原数组 array); }); // 输出 // 元素a下标0 // 原数组a,b,c // 元素b下标1 // 原数组a,b,c // 元素c下标2 // 原数组a,b,cforEach() 也可以使用箭头函数简写代码更简洁。var arr [10, 20, 30]; arr.forEach(item console.log(item 1)); // 输出 11、21、31forEach() 不会改变原数组也不会返回新数组它只负责对每个元素执行操作。如果需要在遍历后得到一个新数组应该使用 map()。var arr [1, 2, 3]; var doubled arr.map(function (item) { return item * 2; }); console.log(doubled); // 输出 [2, 4, 6] console.log(arr); // 原数组不变输出 [1, 2, 3]forEach() 的应用场景非常广泛例如累加求和、统计符合条件的元素个数、批量修改对象属性等。// 场景一累加求和 var scores [80, 90, 75, 95]; var total 0; scores.forEach(function (score) { total score; }); console.log(total); // 输出 340 // 场景二统计大于 85 分的人数 var count 0; scores.forEach(function (score) { if (score 85) { count; } }); console.log(count); // 输出 2 // 场景三批量修改对象属性 var users [ { name: 张三, age: 18 }, { name: 李四, age: 20 } ]; users.forEach(function (user) { user.age 1; // 每个人年龄加 1 }); console.log(users[0].age); // 输出 19 console.log(users[1].age); // 输出 21forEach() 的特殊点在于它不能使用 break 或 return 提前终止循环一旦开始就会遍历完所有元素。如果需要在满足某个条件时提前退出应该使用 for 循环或 some()、every() 等方法。// forEach 无法提前终止 var arr [1, 2, 3, 4, 5]; arr.forEach(function (item) { if (item 3) { return; // 这里只是跳过当前回调并不会终止循环 } console.log(item); // 输出 1、2、4、5 }); // 需要提前终止时使用 for 循环 for (var i 0; i arr.length; i) { if (arr[i] 3) { break; // 遇到 3 就终止循环 } console.log(arr[i]); // 输出 1、2 }什么时候用 forEach() 更好当你只需要对每个元素执行一次操作、不需要提前终止、也不需要返回新数组时forEach() 是最简洁直观的选择。例如打印日志、累加统计、修改对象属性等场景。而需要提前退出、需要跳过某些元素、或需要根据条件控制循环流程时使用 for 循环更合适。

相关新闻

最新新闻

自研推理框架、动态维度、模型导出、算子与计算图

自研推理框架、动态维度、模型导出、算子与计算图

第30题:自研推理框架、动态维度、模型导出、算子与计算图 1. 核心回答 如果让我设计一个自研推理框架,我会把整个系统拆成四层: 模型导出 → 统一计算图 IR → 图优化与算子 Lowering → 后端 Kernel 执行 核心流程可以表示为: Fr…

2026/9/1 5:16:29
InfluxDB离线内网环境完整部署适配方案

InfluxDB离线内网环境完整部署适配方案

InfluxDB离线内网环境完整部署适配方案技术栈:Kubernetes v1.32.13 Rocky Linux 8.6 InfluxDB 2.7.x Containerd 1.7.x操作环境 / 对接原理 / 详细步骤 / 完整命令 / 配置文件 / 验证流程 / 排错方案InfluxDB离线内网环境完整部署适配方案操作环境K8s 集群 3 节点…

2026/9/1 5:16:29
TVA具身智能架构:物理常识锚定与语义对齐解耦机制

TVA具身智能架构:物理常识锚定与语义对齐解耦机制

前沿技术探索:TVA智能体(简称TVA)TVA智能体(亦称“AI智能体视觉”或“TVA视觉智能体”)是依托Transformer架构与“因式智能体”理论构建的通用视觉技术体系。它有机融合深度强化学习(DRL)、卷积…

2026/9/1 5:16:29
20分钟几何动画彻底搞懂傅里叶变换:从旋转向量到FFT实战

20分钟几何动画彻底搞懂傅里叶变换:从旋转向量到FFT实战

这次我们来看一个关于傅里叶变换的深度解析项目。它的核心目标不是让你死记硬背公式,而是通过直观的几何视角,在20分钟内帮你彻底理解傅里叶变换的本质。这对于信号处理、图像分析、通信工程乃至AI领域的频域理解都至关重要。很多人学傅里叶变换时卡在复…

2026/9/1 5:16:29
量产日志与故障溯源体系:分级日志、日志落盘、崩溃快照、离线故障复盘、云端日志闭环方案

量产日志与故障溯源体系:分级日志、日志落盘、崩溃快照、离线故障复盘、云端日志闭环方案

前言 前面我们已经搭建了设备的稳定性架构、低功耗架构和 OTA 安全架构。但设备一旦进入量产,真正让人头疼的问题往往不是“明显崩溃”,而是: 现场设备偶现死机,实验室无法复现;设备离线后不知道最后一刻发生了什么&am…

2026/9/1 5:16:29
基于Matlab的孔隙网络模型:多孔介质渗透率预测实战

基于Matlab的孔隙网络模型:多孔介质渗透率预测实战

简介:基于Matlab开发的多孔介质孔隙网络建模软件包,面向石油工程、环境工程、生物工程及材料科学等领域的研究者与工程师,用于构建虚拟孔隙网络模型,模拟并预测多孔材料内流体的流动、传输及反应特性,同时降低对专业编…

2026/9/1 5:11:29