【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;它提供了一组不同的…

HarmonyOS NEXT Push接入

接入HarmonyOS NEXT Push 推送功能,相比于 Android 真的是简单太多。不再需要适配接入各个厂家的推送 SDK,真是舒服。 1.开通推送服务与配置Client ID 1.1 创建应用获取Client ID 按照官方文档来就可以了:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides…

常用的接口测试工具

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

关于抽样检验的案例来说明95%置信区间

抽样检验是统计学中常用的一种方法&#xff0c;通过分析样本数据来推断总体特征。95%置信区间在抽样检验中扮演着重要角色&#xff0c;因为它提供了对总体参数估计的可靠性区间。下面是一个具体的案例来说明如何使用95%置信区间进行抽样检验。 案例背景 假设一家制药公司正在…

LLM推理加速原理(一)

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

YOLOv3训练自己的数据集

简要笔记 一、数据标注 1.安装好labelme工具 2.标注自己的数据&#xff0c;拿到json文件 二、编辑训练代码所需要的配置文件 config文件夹&#xff0c;create_custom_model.sh &#xff08;参数&#xff1a;类别个数&#xff09; 自动生成网络cfg文件 三、标签格式转换 1.la…

基于R语言的糖尿病检测模型准确率97%

使用R语言构建糖尿病检测模型的示例。我们将使用常见的机器学习算法(如逻辑回归)来构建模型,并使用Pima Indians Diabetes数据集进行训练和评估。 1. 安装和加载必要的包 首先,我们需要安装并加载必要的R包。我们将使用caret包来进行数据预处理、模型训练和评估。 # 安装…

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

辞职后&#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…

Web前端开发基础笔记(6)

Web前端开发基础笔记&#xff08;6&#xff09; 一、Html基础 html的介绍 html的定义 HTML的全称为&#xff1a;HyperText Mark-up-Language,指的是超文本标记语言。标记&#xff1a;就是标签&#xff0c;<标签名称> </标签名称>&#xff0c;比如<html>&…

Introduction to HAL3

目录 HAL3 behavior Overview of HAL1 v.s HAL3 HAL3 behavior: HAL3 - detail: HAL3 operation and pipeline Framework Diagram Problem of current code Operation mode Full v.s limited Do: Don’t: Metadata Manual control – ISP control

【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.评…

spring cloud 配置中心bootstarp.yml多环境打包运行

1、pom.xml文件配置 <profiles><profile><id>dev</id><properties><!-- 本地开发环境 --><surroundings>dev</surroundings></properties><activation><!-- 默认的&#xff0c;不加参数时执行这个profile --&…

数据仓库与数据挖掘实验练习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: …

函数试炼

#include <stdio.h> int test(int x) //形式参数 需要包含变量类型 变量名&#xff08;&#xff09; 生命周期&#xff1a;栈空间&#xff1a;被调用的时候才为形式参数申请内存&#xff0c;调用结束&#xff0c;内存又被系统释放 { int y; printf("test的x…