Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JS中forEach的坑

JS中forEach的坑

作者头像
码客说
发布于 2023-04-06 01:32:40
发布于 2023-04-06 01:32:40
2.3K00
代码可运行
举报
文章被收录于专栏:码客码客
运行总次数:0
代码可运行

前言

平常我们都把forEach和for循环作为等效的替代。

但是forEach中的return并不会返回并跳出循环。

forEach里的return其实是充当continue的作用,即本次循环之后的语句不再执行,不会终止循环,更不会结束函数返回。

示例

假如我们有这样一个需求

如果文章的标题和内容包含了所有的关键字,我们就返回true,也就是说只要不包含任意一个关键字我们就返回false。

我们就按如下写了代码,但是却不能实现我们想要的结果,该方法最终会永远返回true。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//文章的标题和内容是否包含所有的关键字
function isContainAllKeyWords(titleText, contentText, keywords) {
  let textAll = (titleText + contentText).toLowerCase();
  keywords.forEach(keyword => {
    if (textAll.indexOf(keyword.toLowerCase()) === -1) {
      return false;
    }
  });
  return true;
}

解决方法

替换为fori循环

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//文章的标题和内容是否包含所有的关键字
function isContainAllKeyWords(titleText, contentText, keywords) {
  let textAll = (titleText + contentText).toLowerCase();
  for (let i = 0; i < keywords.length; i++) {
    let keyword = keywords[i];
    if (textAll.indexOf(keyword.toLowerCase()) === -1) {
      return false;
    }
  }
  return true;
}

抛出异常并捕获

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//文章的标题和内容是否包含所有的关键字
function isContainAllKeyWords(titleText, contentText, keywords) {
  let textAll = (titleText + contentText).toLowerCase();
  try {
    keywords.forEach(keyword => {
      if (textAll.indexOf(keyword.toLowerCase()) === -1) {
        throw new Error('not all contain'); // 抛出异常
      }
    });
  } catch (e) {
    if (e.message === 'not all contain') {
      return false; // 这里捕获异常并返回
    }
  }
  return true;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-04-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
『Flutter开发实战』一小时掌握Dart语言
本文将从变量和运算符开始到类和库的使用来向你介绍 Dart 编程语言的主要功能,这里假设你已经有使用其它语言进行编程的经验。
小宋是呢
2022/01/05
5.2K0
vue基础(二)
概念:Vue.js 允许你自定义过滤器,可被用作一些常见的文本格式化。过滤器可以用在两个地方:mustache 插值和 v-bind 表达式。过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符指示;
不愿意做鱼的小鲸鱼
2022/09/24
6240
vue基础(二)
面试官问我 JS 中 foreach 能不能跳出循环
当年懵懂无知的我被问到这个问题时,脑袋一片空白,因为我一度认为forEach可能只是为了方便书写所创造出来的语法糖,在业务代码中也经常使用,但没有思考过它存在的问题,本文旨在记录自己的心路历程,抛砖引玉,如果对你有所帮助那就更好啦。
茶无味的一天
2022/09/30
3.3K0
jQuery-based Local Search Engine for Hexo
image.png 介绍如何为 hexo 写一个本地的搜索引擎。 Contents 安装和配置 hexo-generator-search 编写搜索界面 实现本地搜索函数 调用搜索函数 早在我最初从 Ruhoh 迁移博客到 Hexo 时,我就有动手写一个本地的搜索引擎的想法。比起使用第三方服务的站内搜索,本地搜索引擎有几个好处: 更可靠。不用担心由于某些显而易见的原因导致第三方服务不可访问。 速度更快。不管是 Google 还是 Swiftype ,第三方搜索服务的加载速度总是比较慢,影响浏览体验。
HaHack
2018/07/03
6480
Turndown 源码分析:三、规则集`rules.js` REV1
ApacheCN_飞龙
2023/10/13
1840
java中“53”个关键字(含2个保留字)
2).定义类、接口、抽象类和实现接口、继承类的关键字、实例化对象(共6个)
全栈程序员站长
2022/09/08
4550
JavaScript中的forEach,你踩过哪些坑?请避开这些常见误区
在JavaScript的世界里,forEach是我们常用的数组遍历方法之一。大多数开发者都熟悉它的基础用法,但你知道吗?在处理异步操作时,forEach可能会让你掉进一些意想不到的“坑”。这篇文章将带你深入了解forEach的特性和局限,揭示一些你可能不知道的使用技巧和解决方案。无论你是前端新手,还是经验丰富的开发者,都能从中学到有用的知识,帮助你在实际项目中避开那些隐藏的陷阱。准备好了吗?让我们一探究竟!
前端达人
2024/11/25
2660
JavaScript中的forEach,你踩过哪些坑?请避开这些常见误区
Lambda的forEach慎用,因为没办法跳出循环体啊
点击上方蓝色字体,选择“设为星标” 回复”学习资料“获取学习宝典 # 情景展示 如上图所示,我们想要终止for循环,使用return。 执行结果如下: 我们可以看到,只有赵六没被打印出来,后续的数组元素依旧被执行了。 也就是说,关键字"return",在这里执行的效果相当于普通for循环里的关键词continue"。 # 原因分析 我们知道,在普通for循环里面,想要提前结束(终止)循环体使用"break"; 结束本轮循环,进行下一轮循环使用"continue"; 另外,在普通for里,如果使用"r
猿天地
2022/07/26
9300
Lambda的forEach慎用,因为没办法跳出循环体啊
18. Vue 常用列表操作实例 - 根据关键字实现数组的过滤
3.在使用 v-for 指令循环每一行数据的时候,不再直接 item in list,而是 in 一个 过滤的methods 方法,同时,把过滤条件searchName传递进去:
Devops海洋的渔夫
2020/03/19
1.7K0
JS快速入门(一)
ps:这里的let在ECM6中可用,可能在较低的版本中无法正常使用,pycharm在使用上述关键字的时候如果出现了报错说明js版本没有选择6 需要我们自定义设置
HammerZe
2022/03/24
2.7K0
JS快速入门(一)
Python随笔(一)Python3关键字 原
(adsbygoogle = window.adsbygoogle || []).push({});
Pulsar-V
2019/04/01
6510
Python随笔(一)Python3关键字
                                                                            原
Vue进阶(幺零七):arr.forEach() 跳出循环
我们都知道for循环里要跳出整个循环是使用break,但在数组中用forEach循环如要退出整个循环呢?使用break会报错,使用return也不能跳出循环。
全栈程序员站长
2022/09/05
1.5K0
上手指南 | Dart,随用随查
dynamic:该类型具有所有可能的属性和方法,一个变量被 dynamic 修饰,相当于告诉系统,我知道这个类型到底是什么。使用后再编译时不会推断数据的类型,但是运行时会推断。
345
2022/02/11
1.8K0
上手指南 | Dart,随用随查
Java8 lambda 表达式 forEach 如何提前终止?
在 Java8 中,Lambda 表达式极大地简化了代码的编写,并且提高了代码的可读性和可维护性。而 forEach 方法也是 Lambda 表达式中经常用到的一个方法,它能够迭代集合中的元素,对每个元素执行指定的操作。然而,在某些情况下,我们可能需要在迭代过程中提前终止,这时该怎么做呢?
用户1289394
2023/08/22
2650
Java8 lambda 表达式 forEach 如何提前终止?
为 hexo 博客添加本地搜索功能
使用 hexo-generator-search 的 Hexo 插件来做内容搜索,安装命令如下:
好好学java
2020/05/07
3.3K0
面试官:Java8 lambda 表达式 forEach 如何提前终止?
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/08/29
8980
面试官:Java8 lambda 表达式 forEach 如何提前终止?
Python中7种主要关键词提取算法的基准测试
我一直在寻找有效关键字提取任务算法。目标是找到一种算法,能够以有效的方式提取关键字,并且能够平衡提取质量和执行时间,因为我的数据语料库迅速增加已经达到了数百万行。我对于算法一个主要的要求是提取关键字本身总是要有意义的,即使脱离了上下文的语境也能够表达一定的含义。
deephub
2021/12/01
6290
Python中7种主要关键词提取算法的基准测试
java关键字_Java关键字
Java keywords are the reserved words that are used by the Java compiler. These keywords have special meaning to the Java compiler. The reserved keywords help us in writing code and help the compiler in understanding the code and create the bytecode.
用户7886150
2020/12/13
1K0
JS的控制流程
通过var声明的变量没有块级作用域。在语句块里声明的变量作用域是其所在的函数或者 script 标签内,你可以在语句块外面访问到它。换句话说,语句块 不会生成一个新的作用域。尽管单独的语句块是合法的语句,但在JavaScript中你不会想使用单独的语句块,因为它们不像你想象的C或Java中的语句块那样处理事物。例如:
acc8226
2022/05/17
7.5K0
JS获取富文本(HTML)的摘要
在一些文章类程序中,我们直接对文章内容检索的话,数据量大,速度较慢,我们可以在保存的时候获取文章的摘要,方便后续检索。
码客说
2024/03/29
5480
相关推荐
『Flutter开发实战』一小时掌握Dart语言
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验