当前位置:首页 >百科 >面试题:你能停止 JavaScript 中的“ForEach”吗? 我最初的面试回答是:“不

面试题:你能停止 JavaScript 中的“ForEach”吗? 我最初的面试回答是:“不

2024-07-01 12:18:33 [百科] 来源:避面尹邢网

面试题:你能停止 JavaScript 中的面试“ForEach”吗?

作者:启辰8 开发 后端 面试官:你能停止 JavaScript 中的ForEach 循环吗? 这是我在采访中曾经被问到的一个问题,在面试官回答之前,题能停止我花了一些时间解释我对为什么我们不能直接停止 JavaScript 中的面试 ForEach 循环的理解。

JavaScript 中有 3 种停止 forEach 的题能停止方法

面试官:你能停止 JavaScript 中的 forEach 循环吗? 这是我在采访中曾经被问到的一个问题,我最初的面试回答是:“不,我不能这样做。题能停止”

面试题:你能停止 JavaScript 中的“ForEach”吗? 我最初的面试回答是:“不

不幸的面试是,我的题能停止回答导致面试官突然结束了面试。

面试题:你能停止 JavaScript 中的“ForEach”吗? 我最初的面试回答是:“不

我对结果感到沮丧,面试问面试官:“为什么? 实际上可以停止 JavaScript 中的题能停止 forEach 循环吗?”

面试题:你能停止 JavaScript 中的“ForEach”吗? 我最初的面试回答是:“不

在面试官回答之前,我花了一些时间解释我对为什么我们不能直接停止 JavaScript 中的面试 forEach 循环的理解。

我的题能停止答案正确吗?

小伙伴们,下面的面试代码会输出什么数字呢?

它会只输出一个数字还是多个数字?

是的,它会输出‘0’、题能停止‘1’、面试‘2’、‘3’。

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

这是正确的! 我向面试官展示了这段代码,但他仍然相信我们可以停止 JavaScript 中的 forEach 循环。

天哪,你一定是在开玩笑。

为什么?

为了说服他,我不得不再次实现forEach模拟。

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”迭代数组时,回调将为数组的每个元素执行一次,并且我们无法过早地摆脱它。

例如,在下面的代码中,即使“func1”遇到break语句,“2”仍然会输出到控制台。

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

停止 forEach 的 3 种方法

你太棒了,但我想告诉你,我们至少有 3 种方法可以在 JavaScript 中停止 forEach。

1、抛出错误

当我们找到第一个大于或等于0的数字后,这段代码将无法继续。 所以控制台只会打印出0。

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) {   }

哦! 我的天啊! 我简直不敢相信,这让我无法说话。

2、#设置数组长度为0

请不要那么惊讶,面试官对我说。

我们还可以通过将数组的长度设置为0来中断forEach。如您所知,如果数组的长度为0,forEach将不会执行任何回调。

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

哦! 我的心已经乱了。

3、#使用splice删除数组的元素

思路和方法2一样,如果能删除目标元素后面的所有值,那么forEach就会自动停止。

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)  }})

我睁大了眼睛,我不想读这段代码。 这不好。

请用于或一些

我对面试官说:“哦,也许你是对的,你设法在 JavaScript 中停止了 forEach,但我认为你的老板会解雇你,因为这是一个非常糟糕的代码片段。

我不喜欢做那样的事; 这会让我的同事讨厌我。”

也许我们应该使用“for”或“some”方法来解决这个问题。

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  }}

2、some

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

结尾

虽然面试官以这个问题结束了面试,但我很庆幸自己没有加入公司,不想为了某种目的而写出一段臭代码。 臭死了。

责任编辑:姜华 来源: 今日头条 JavaScripforEach 循环

(责任编辑:休闲)

    推荐文章
    • 安逸花还完钱了每个月还扣98 具体原因是怎样的?

      安逸花还完钱了每个月还扣98 具体原因是怎样的?安逸花是由马上消费金融推出的纯信用贷款,额度高,期限长,有不少人都在上面借过钱。其中有些人借钱后碰到一种奇怪的现象,明明把安逸花的欠款还上了竟然还在扣钱,比如有人安逸花还完钱了每个月还扣98,那么这是 ...[详细]
    • 1799元购买小米8SE?这绝对不是梦

      1799元购买小米8SE?这绝对不是梦小米8SE目前在京东商城仅需1799元,直降500元。【PChome手机频道资讯报道】随着双十一的临近,各大电商平台也开始了各种各样的优惠措施。作为国内最大的3C电商平台,京东商城的优惠活动可以说是一 ...[详细]
    • RedCap可能成为物联网背后的关键驱动力

      RedCap可能成为物联网背后的关键驱动力RedCap可能成为物联网背后的关键驱动力2023-09-13 14:22:51物联网 随着即将推出的名为“RedCap设备”的5G规范,该解决方案可能即将出现。该规范专为物联网设备设计,预计将在一年 ...[详细]
    • 澳门:春节加班和包机航班设80个 较去年翻倍

      澳门:春节加班和包机航班设80个 较去年翻倍记者5日从澳门特区民航局获悉,今年澳门共批准80个加班和包机航班,来往澳门与海峡两岸、以及越南、日本和泰国的多个城市,以增加运力应对春节航空运输需求。据悉,春节加班和包机航班分别由澳门航空、吉祥航空、 ...[详细]
    • 新能源板块成为反弹急先锋 板块调整已相对充分

      新能源板块成为反弹急先锋 板块调整已相对充分自今年4月27日大盘创下2863点的年内新低后,逐渐震荡企稳站上3000点,近来新能源板块成为反弹急先锋。期间,新能源主题基金及重仓新能源板块的基金也大幅“回血”。基金经理表示 ...[详细]
    • 苹果M3全系列跑分曝光!16核Max反超24核M2 Ultra,战平英特尔AMD旗舰CPU

      苹果M3全系列跑分曝光!16核Max反超24核M2 Ultra,战平英特尔AMD旗舰CPU苹果M3全系列跑分曝光!16核Max反超24核M2 Ultra,战平英特尔AMD旗舰CPU作者:新智元 2023-11-05 10:14:20人工智能 新闻 等了这么长时间,M3芯片终于要投入实战了。 ...[详细]
    • 《使命召唤:现代战争3》PC预告、解锁时间和配置公开

      《使命召唤:现代战争3》PC预告、解锁时间和配置公开动视发布了《使命召唤:现代战争3》PC版战网和Steam)大量新细节,PC版领衔开发商Beenox表示玩家期待超过500种自定义选择,4K分辨率,超宽屏支持以及DLSS3。《现代战争3》战役预载和抢先 ...[详细]
    • 百威亚太1

      百威亚太1北京商报讯 记者 刘一博 冯若男)10月31日,百威亚太发布《截至2023年9月30日止九个月的未经审核业绩及2023年第三季度财务资料》显示,今年前三季度实现收入55.63亿美元,同比增长11.5% ...[详细]
    • 恒嘉融资租赁(00379.HK)预计年度亏损扩大至3亿

      恒嘉融资租赁(00379.HK)预计年度亏损扩大至3亿恒嘉融资租赁(00379.HK)公告,公司预计截至2020年12月31日止年度将录得重大净亏损约3亿港元至4亿港元,相较于上年度净亏损约5100万港元。董事会认为,预期净亏损增加主要由于以下原因:(i ...[详细]
    • 威频科技完成2000万元A++轮融资

      威频科技完成2000万元A++轮融资艾媒咨询11月6日消息,成都威频科技有限公司以下简称为“威频科技”)宣布完成2000万元A+轮融资,主要用于研发、备货及流动资金补充,全力实现信号源、频谱仪、网络分析仪等批量生产能力。威频科技是一家专 ...[详细]
    热点阅读