【Js】深入浅出的js for循环 for loop以及闭坑指南

在JavaScript中使用forEach循环来删除数组中的特定元素可能会导致一些问题,因为forEach不允许你在迭代过程中修改数组的长度。
这会导致意外的行为,例如跳过元素或错误地索引。因此,建议使用其他方法来安全地删除数组中的元素。
存在的问题
1. 数组长度改变:forEach循环期间,如果你删除了一个元素,数组的长度会改变,
这可能导致一些元素被跳过或多次处理。  
处理少量数据, 这个问题不显著, 当处理成千上万的数据, 会出现数据差异问题, 坑就在这.
2. 无法中途停止:forEach无法中途停止循环,即使你找到了需要删除的元素。

替代方法
  • 使用filter方法:
filter方法会创建一个新的数组,其中包含所有通过指定函数测试的元素。这样可以避免修改数组长度的问题。
let array = [1, 2, 3, 4, 5]; 
let elementToRemove = 3; 
array = array.filter(item => item !== elementToRemove); 
console.log(array); // 输出: [1, 2, 4, 5]
  • 使用for循环
使用普通的for循环, 从后向前遍历数组,可以安全地删除元素而不会跳过任何元素。
let array = [1, 2, 3, 4, 5];
let elementToRemove = 3;
for (let i = array.length - 1; i >= 0; i--) {if (array[i] === elementToRemove) {array.splice(i, 1);}
}
console.log(array); // 输出: [1, 2, 4, 5]

总结
虽然可以使用forEach来迭代数组,但删除元素时应该使用其他方法来避免潜在的问题。
filter方法和从后向前的for循环是更安全和可靠的选择。

从前往后的for循环,  从后往前的for循环 正确使用:

 

  • 从前往后的for循环(需要额外处理索引)
let array = [1, 2, 3, 4, 5];
let elementToRemove = 3;for (let i = 0; i < array.length; i++) {if (array[i] === elementToRemove) {array.splice(i, 1);i--; // 调整索引以确保不会跳过下一个元素}
}console.log(array); // 输出: [1, 2, 4, 5]

  • 从后往前的for循环(无需额外处理索引)
let array = [1, 2, 3, 4, 5];
let elementToRemove = 3;for (let i = array.length - 1; i >= 0; i--) {if (array[i] === elementToRemove) {array.splice(i, 1);}
}console.log(array); // 输出: [1, 2, 4, 5]

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

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

相关文章

php质量工具系列之phpmd

PHPMD PHP Mess Detector 它是PHP Depend的一个衍生项目&#xff0c;用于测量的原始指标。 PHPMD所做的是&#xff0c;扫描项目中可能出现的问题如&#xff1a; 可能的bug次优码过于复杂的表达式未使用的参数、方法、属性 PHPMD是一个成熟的项目&#xff0c;它提供了一组不同的…

常用的接口测试工具

大家好&#xff0c;当谈到软件开发中的质量保证时&#xff0c;接口测试无疑是至关重要的一环。在当今快节奏的开发环境中&#xff0c;确保应用程序的各个组件之间的交互正常运作是至关重要的。而接口测试工具则成为了开发人员和测试人员的得力助手&#xff0c;帮助他们有效地测…

LLM推理加速原理(一)

1.大语言模型的基本结构 transfomer block: 输入--->正则化-->qkv三个矩阵层(映射到三个不同空间中)---->q,k,v之后self attention进行三0合一---->线性映射,正则化。 2.大语言模型的推理 目前主流的语言大模型都采用decoder-only的结构,其推理过程由两部分…

辞职后,如何理性面对公司的挽留?我的职场选择之路

辞职后&#xff0c;面对公司的挽留&#xff0c;你会决定留下还是离开呢&#xff1f;这是一个让人犹豫不决的问题。 让我们来分析一下个人在职场中的价值和期望。每个人都有自己的职业规划和发展目标&#xff0c;这是非常正常的。在工作中&#xff0c;我们希望自己能够得到充分的…

常规操作-ArcGIS常用标注技巧

常规操作-ArcGIS常用标注技巧 1、简单的"&“符号&#xff1a;多字段表达只需要用”&"符号&#xff0c;多个字段之间需要空格&#xff0c;空格符号需要加双引号。 表达式为&#xff1a; [字段] & " " & [字段] 2、“VBnewline"应用…

vue 将echart 下载为base64图片

1 echart是页面的子组件&#xff0c; 2 页面有多个echart 3 将多个echart下载为base64图片 // 子组件 echart&#xff0c;要保存echartconst chart this.$echarts.init(this.$refs.chart, light) this.chartData chart; //保存数据&#xff0c;供父组件alarmReport调用(th…

【CTF MISC】XCTF GFSJ0155 simple_transfer Writeup(流量分析+文件提取)

simple_transfer 文件里有flag&#xff0c;找到它。 解法 用 wireshark 分析&#xff0c;大部分都是 TCP 协议。 打开协议分级统计&#xff0c;有个 DLEP 占了 94.2% 的数据。 作为过滤器使用。全都是 Unknown。 用 binwalk 扫描。 binwalk f9809647382a42e5bfb64d7d447b409…

集合的介绍

集合指的是数据集中在一块。集合的好处体现在以下几点 1.可以动态保存任意多个对象&#xff0c;使用比较方便。 2.提供了一系列方便的操作对象的方法&#xff1a;add,remove,set,get等&#xff0c;方便增加&#xff0c;删除内容。 集合Collection单列集合一览图 集合Map双列集…

天智云智造管理平台 Usermanager.ashx SQL注入漏洞复现

0x01 产品简介 天智云智造管理平台又称天智云SAAS平台,是专业为中小型生产企业提供智能化生产管理的标准MES软件。 该系统向中小型生产企业提供一站式平台服务,串联销售/采购/生产/质量/仓库等各个部门。对内可以节约成本,规范生产过程,实现质量追溯,实时跟踪生产及库存数…

动态组件 commponted 怎么使用

优点&#xff1a; 提高代码复用性&#xff1a;通过将通用组件了逻辑封装在动态组件中&#xff0c;可以在多个地方重复使用&#xff0c;减少代码冗余。增强灵活性&#xff1a;动态组件可以根据不同的条件或状态动态切换显示内容&#xff0c;使用应用更加灵活和可定制。实现动态…

吴恩达2022机器学习专项课程C2W3:2.24 机器学习实践建议(决定下一步做什么模型评估模型选择交叉验证)

目录 引言一、绘图评估模型的局限性二、使用测试集评估模型1.线性回归2.逻辑回归3.测试误差与泛化误差 三、测试集评估模型存在的问题1.评估模型流程2.流程存在的问题 四、解决问题1.训练集分割成三段2.计算交叉验证集的误差 五、重新评估模型1.线性回归模型2.神经网络模型3.评…

数据仓库与数据挖掘实验练习8

pivot_table()透视表 sales.pivot_table(values Revenue,index Date, columns Name,aggfunc sum,fill_value 0,margins True,margins_name 总计 ) 使用 Pandas 的 pivot_table 函数将一个名为 sales 的 DataFrame 转化为透视表。 1. sales.pivot_table(...) sales: …

将写的项目部署到Linux服务器上

一、首先购入一个云Linux服务器 例如&#xff1a;腾讯云&#xff0c;阿里云等&#xff08;经常会有学生优惠&#xff09; 这个腾讯云&#xff0c;新用户82元可以使用一年&#xff0c;还是可以的&#xff08;如果觉得贵&#xff0c;可以和同学一起拼一个~~&#xff09; 二、连接…

Python实现PPT表格的编写包含新建修改插图(收藏备用)

自动创建一个ppt文件并创建好表格 代码要用到pptx库 pip install python-pptx 创建含有表格的ppt文件代码&#xff1a; from pptx import Presentation from pptx.util import Inches# 创建一个PPT对象 ppt Presentation()# 添加一个幻灯片 slide ppt.slides.add_slide(p…

vscode编译文件夹下所有文件的配置(包含插件和 .json 文件)

文章目录 我所使用的插件.json 文件配置1. c_cpp_properties.json2. launch.json3. settings.json4. tasks.json 如何运行 我所使用的插件 红框中的五个插件是必备的&#xff0c;其中 Code Runner 插件可以在写完一个 .c 或 .cpp 文件后&#xff0c;按下 Crtl R 快捷键快速编…

Kubernetes——Ingress详解

目录 前言——Service策略的作用 1.外部访问方案 2.使用场景和限制 2.1NodePort 2.2LoadBalancer 2.3externalIPs 2.4Ingress 3.Ingress如何实现对外服务 4.LB和Ingress结合起来实现对外服务的过程 一、Ingress 1.定义 2.组成 3.工作原理 4.总结 二、部署Nginx-I…

SQL Server数据库安装部署

目录 一、简介二、安装步骤1、安装包下载2、安装过程 一、简介 SQL Server 是由 Microsoft 公司开发和提供的关系型数据库管理系统&#xff08;RDBMS&#xff09;。它是一个功能强大且可靠的数据库平台&#xff0c;广泛用于企业和组织中的数据存储和管理。以下是 SQL Server 的…

Gradio中Button用法及事件监听器click方法使用

Gradio中Button用法及事件监听器click方法使用 瞎想乱记 事情是这样的&#xff1a;入职时面试的是Java&#xff0c;简历中写了会python&#xff0c;刚好最近有个小项目需要用Python实现&#xff0c;老板就将这个项目交给了我&#xff0c;我… 项目中还真遇到了好几个坑&#…

SEO之关键词扩展(二)

初创企业搭建网站的朋友看1号文章&#xff1b;想学习云计算&#xff0c;怎么入门看2号文章谢谢支持&#xff1a; 1、我给不会敲代码又想搭建网站的人建议 2、新手上云 &#xff08;接上一篇。。。&#xff09; 5、各种形式的变体 1.同义词 假设核心关键词是酒店&#xff0c;…

Ps:批处理

Ps菜单&#xff1a;文件/自动/批处理 Automate/Batch 批处理 Batch命令可以对一个文件夹中的文件执行事先创建的动作 Actions&#xff0c;从而快速地完成大量的重复性操作&#xff0c;提升工作效率。 提示 1&#xff1a; 可以从 Adobe Bridge 中调用 Photoshop 的批处理命令。 …