当前位置:首页 > 科技  > 软件

面试官:你能停止 JavaScript 中的 forEach 循环吗?

来源: 责编: 时间:2023-08-14 22:01:25 486观看
导读面试官:你能停止 JavaScript 中的 forEach 循环吗?在回答这个问题时,我的回答导致面试官突然结束了面试。我对结果感到沮丧,问面试官:“为什么?实际上可以停止 JavaScript 中的 forEach 循环吗?”在面试官回答之前,我花了

面试官:你能停止 JavaScript 中的 forEach 循环吗?

在回答这个问题时,我的回答导致面试官突然结束了面试。QMT28资讯网——每日最新资讯28at.com

我对结果感到沮丧,问面试官:“为什么?实际上可以停止 JavaScript 中的 forEach 循环吗?”QMT28资讯网——每日最新资讯28at.com

在面试官回答之前,我花了一些时间解释我对为什么我们不能直接停止 JavaScript 中的 forEach 循环的理解。QMT28资讯网——每日最新资讯28at.com

我的答案正确吗?QMT28资讯网——每日最新资讯28at.com

小伙伴们,下面的代码会输出什么数字呢?QMT28资讯网——每日最新资讯28at.com

它会只输出一个数字还是多个数字?QMT28资讯网——每日最新资讯28at.com

是的,它会输出‘0’、‘1’、‘2’、‘3’。QMT28资讯网——每日最新资讯28at.com

const array = [ -3, -2, -1, 0, 1, 2, 3 ]array.forEach((it) => {  if (it >= 0) {    console.log(it)    return // or break  }})

QMT28资讯网——每日最新资讯28at.com

这是正确的!我向面试官展示了这段代码,但他仍然相信我们可以停止 JavaScript 中的 forEach 循环。QMT28资讯网——每日最新资讯28at.com

天哪,你一定是在开玩笑。QMT28资讯网——每日最新资讯28at.com

为什么?QMT28资讯网——每日最新资讯28at.com

为了说服他,我不得不再次实现forEach模拟。QMT28资讯网——每日最新资讯28at.com

Array.prototype.forEach2 = function (callback, thisCtx) {  if (typeof callback !== 'function') {    throw `${callback} is not a function`  }  const length = this.length  let i = 0  while (i < length) {    if (this.hasOwnProperty(i)) {      // Note here:Each callback function will be executed once      callback.call(thisCtx, this[ i ], i, this)    }    i++  }}

是的,当我们使用“forEach”迭代数组时,回调将为数组的每个元素执行一次,并且我们无法过早地摆脱它。QMT28资讯网——每日最新资讯28at.com

例如,在下面的代码中,即使“func1”遇到break语句,“2”仍然会输出到控制台。QMT28资讯网——每日最新资讯28at.com

const func1 = () => {  console.log(1)  return}const func2 = () => {  func1()  console.log(2)}func2()

停止 forEach 的 3 种方法

你太棒了,但我想告诉你,我们至少有 3 种方法可以在 JavaScript 中停止 forEach。QMT28资讯网——每日最新资讯28at.com

1.抛出错误

当我们找到第一个大于或等于0的数字后,这段代码将无法继续。所以控制台只会打印出0。QMT28资讯网——每日最新资讯28at.com

const array = [ -3, -2, -1, 0, 1, 2, 3 ]try {  array.forEach((it) => {    if (it >= 0) {      console.log(it)      throw Error(`We've found the target element.`)    }  })} catch (err) {}

哦!我的天啊!我简直不敢相信,这让我无法说话。QMT28资讯网——每日最新资讯28at.com

2.设置数组长度为0

请不要那么惊讶,面试官对我说。QMT28资讯网——每日最新资讯28at.com

我们还可以通过将数组的长度设置为0来中断forEach。如您所知,如果数组的长度为0,forEach将不会执行任何回调。QMT28资讯网——每日最新资讯28at.com

const array = [ -3, -2, -1, 0, 1, 2, 3 ]array.forEach((it) => {  if (it >= 0) {    console.log(it)    array.length = 0  }})

QMT28资讯网——每日最新资讯28at.com

我的心已经乱了。QMT28资讯网——每日最新资讯28at.com

3.使用splice删除数组的元素

思路和方法2一样,如果能删除目标元素后面的所有值,那么forEach就会自动停止。QMT28资讯网——每日最新资讯28at.com

const array = [ -3, -2, -1, 0, 1, 2, 3 ]array.forEach((it, i) => {  if (it >= 0) {    console.log(it)    // Notice the sinful line of code    array.splice(i + 1, array.length - i)  }})

QMT28资讯网——每日最新资讯28at.com

我睁大了眼睛,我不想读这段代码。这不好。QMT28资讯网——每日最新资讯28at.com

请用for或someQMT28资讯网——每日最新资讯28at.com

我对面试官说:“哦,也许你是对的,你设法在 JavaScript 中停止了 forEach,但我认为你的老板会解雇你,因为这是一个非常糟糕的代码片段。QMT28资讯网——每日最新资讯28at.com

我不喜欢做那样的事;这会让我的同事讨厌我。”QMT28资讯网——每日最新资讯28at.com

也许我们应该使用“for”或“some”方法来解决这个问题。QMT28资讯网——每日最新资讯28at.com

1.for

const array = [ -3, -2, -1, 0, 1, 2, 3 ]for (let i = 0, len = array.length; i < len; i++) {  if (array[ i ] >= 0) {    console.log(array[ i ])    break  }}

QMT28资讯网——每日最新资讯28at.com

2. some

const array = [ -3, -2, -1, 0, 1, 2, 3 ]array.some((it, i) => {  if (it >= 0) {    console.log(it)    return true  }})

QMT28资讯网——每日最新资讯28at.com

总结

虽然面试官以这个问题结束了面试,但我很庆幸自己没有加入公司,不想为了某种目的而写出一段臭代码。 这样的面试官也不是面试者所喜欢的,为了面试而面试的面试官和面试题,让面试者觉得有点无辜与无奈。QMT28资讯网——每日最新资讯28at.com

不管怎么样,还是努力提升自己的技能吧。QMT28资讯网——每日最新资讯28at.com

最后,感谢您的阅读。QMT28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-5742-0.html面试官:你能停止 JavaScript 中的 forEach 循环吗?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 五个 AI API 可自动解决你的日常问题

下一篇: 新兴技术趋势将彻底改变我们的世界

标签:
  • 热门焦点
  • 5月iOS设备好评榜:iPhone 14仅排第43?

    来到新的一月,安兔兔的各个榜单又重新汇总了数据,像安卓阵营的榜单都有着比较大的变动,不过iOS由于设备的更新换代并没有那么快,所以相对来说变化并不大,特别是iOS好评榜,老款设
  • 本地生活这块肥肉,拼多多也想吃一口

    出品/壹览商业 作者/李彦编辑/木鱼拼多多也看上本地生活这块蛋糕了。近期,拼多多在App首页&ldquo;充值中心&rdquo;入口上线了本机生活界面。壹览商业发现,该界面目前主要
  • 消费结构调整丨巨头低价博弈,拼多多还卷得动吗?

    来源:征探财经作者:陈香羽随着流量红利的退潮,电商的存量博弈越来越明显。曾经主攻中高端与品质的淘宝天猫、京东重拾&ldquo;低价&rdquo;口号。而过去与他们错位竞争的拼多多,靠
  • 阿里大调整

    来源:产品刘有媒体报道称,近期淘宝天猫集团启动了近年来最大的人力制度改革,涉及员工绩效、层级体系等多个核心事项,目前已形成一个初步的&ldquo;征求意见版&rdquo;:1、取消P序列
  • 网红炒股不为了赚钱,那就是耍流氓!

    来源:首席商业评论6月26日高调宣布入市,网络名嘴大v胡锡进居然进军了股市。在一次财经媒体峰会上,几个财经圈媒体大佬就&ldquo;胡锡进炒股是否知道认真报道&rdquo;展开讨论。有
  • 超闭合精工铰链 彻底消灭缝隙 三星Galaxy Z Flip5与Galaxy Z Fold5发布

    2023年7月26日,三星电子正式发布了Galaxy Z Flip5与Galaxy Z Fold5。三星新一代折叠屏手机采用超闭合精工铰链,让折叠后的缝隙不再可见。同时,配合处
  • 回归OPPO两年,一加赢了销量,输了品牌

    成为OPPO旗下主打性能的先锋品牌后,一加屡创佳绩。今年618期间,一加手机全渠道销量同比增长362%,凭借一加 11、一加 Ace 2、一加 Ace 2V三款爆品,一加
  • OPPO K11样张首曝:千元机影像“卷”得真不错!

    一直以来,OPPO K系列机型都保持着较为均衡的产品体验,历来都是2K价位的明星机型,去年推出的OPPO K10和OPPO K10 Pro两款机型凭借各自的出色配置,堪称有
  • 联想YOGA 16s 2022笔记本将要推出,屏幕支持触控功能

    联想此前宣布,将于11月2日19:30召开联想秋季轻薄新品发布会,推出联想 YOGA 16s 2022 笔记本等新品。官方称,YOGA 16s 2022 笔记本将搭载 16 英寸屏幕,并且是一
Top