连JS数组遍历都打不断,还敢称自己为高级前端?

小夏 科技 更新 2024-01-30

我采访了一个自称是高级前端,精通JS,精通VUE,工作了6年的人。 我们也不玩假设,让他感受面试制造火箭,工作搞砸,然后是真实的东西。

问1:你知道JS有什么方法可以实现数组遍历吗?

答1:for、for in、for of、foreach、map 等,无论如何都可以用来遍历”。

问2:那么这些方法可以中断哪些呢?

答2:好像 for can't,好像 for in 可以,..语无伦次,陷入沉思。

来吧,女士们,先生们,如果你不知道,那么你可以阅读这篇文章收藏夹 + 喜欢鼓励挥手。

forfor/infor/ofarray.foreacharray.maparray.reducearray.filterarray.somearray.每种方法都不会一一唠叨,这里是关键点。

重要提示:for in 以任意顺序遍历对象的可枚举属性(符号除外)。 因此,for in 通常用于遍历对象。 for of 在可迭代对象(包括arraymapsetstringtypedarray、参数、对象等),调用自定义迭代钩子,并为每个不同属性的值执行语句。因此,for of 通常用于遍历数组。 注意:

对于in是无序的,需要注意遍历的使用,参考:js puzzle-object中的key是有序的吗?什么可枚举?仔细看看: 可枚举的突出显示示例:

两者都要遍历对象 let obj = ;// for/infor (var o in obj) ;// output// id// name// for/offor (var o of obj) ;Error 对象不是迭代器,不能用于 VM319:1 Uncaught TypeError: Obj is not iterable
正如你所看到的,因为不能遍历一个对象。

两者都遍历数组 let ary = ['a', 'b', 'c'];注意:数组也是一个特殊的对象,我添加了一个属性aryname = 'james'; // for/infor (var o in ary) ;输出打印数组索引和 Name 属性的值(注意)!// 0// 1// 2// james// for/offor (var o of ary) ;输出仅打印每个元素 a、b、c 的数组
所以for/ofES6的出现也在一定程度上得到了补偿for/in遍历数组中的缺陷。

重要提示:创建一个新数组(不要忘记将map将结果分配给遍历,否则将浪费遍历)原始数组不受影响(除非您将map什么时候foreach使用,直接在循环中修改原始数组的值)新数组的每个结果都是 ** 函数中返回的值(如果你的 ** 函数忘记了)。reture新数组的每个元素都是undefined典型错误案例:

map用于遍历数组,map,直接修改原数组的值

错误示例:

let demoary = [,demoary.map(item => )console.log(demoary);
正确示例:

let demoary = [, 方法一:foreach 遍历数组 demoaryforeach(item => )console.log(demoary);方法二:map生成一个新数组来替换原来的数组demoary = demoarymap(item => )console.log(demoary);
要点:

生成新结果,结果取决于 ** 函数return原始数组的值不受影响(除非你把它reduce什么时候foreach使用,直接在循环中修改原始数组的值)来接收 2 个参数,callbackinitialvaluecallback有 4 个参数:累计值当前值当前指数原始值,一般使用前2个参数initialvalue或者,如果省略默认的第一个元素,但如果数组也是空的,则将收到一个错误,其中包含重要示例:

有初始值 [1, 2, 3, 4, 5]。reduce((acc, cur) => ,100);输出迭代 5 次,最后返回 115 100 1 101 2 103 3 106 4 110 5 115 的整数和
如果没有初始值,遍历将少 1,因为数组的第一个结果充当迭代器的第一个值。

没有初始值 [1, 2, 3, 4, 5]。reduce((acc, cur) => ) 输出迭代 4 次,最后返回 15 1 2 3 3 6 4 10 5 15 的 int 和结果
两者都用于确定数组中是否存在满足条件的元素,并返回结果trueorfalse重要提示:同时使用这两种方法时,必须明确何时使用它们return true or false确定结果

亮点示例:

// some[1, 2, 3, 4, 5].some(item => ;默认值为 false,可以省略。 这意味着它找不到,它将继续遍历并找到数组的最后一个返回值 false;}) 输出迭代 3 次,找到结果并返回 true 1 2 3 true
// every[1, 2, 3, 4, 5].every(item => ;默认值为 false,必须写入。 如果没有明确说明这个时间是真的,说明第一个元素不合适,会直接退出。  return true;}) 输出迭代 3 次,发现不合适的结果并返回 false 1 2 3 false
我们先来看看如何破解数组遍历:

BreakThrowReturnContinue(立即结束此循环,**不执行后继续,进入下一轮循环,认为中止当前循环,几乎不计入) forfor ofarraysomearray.我们想要的这些方法中的每一种:中断数组的常用方法是array.somearray.every,因为在中断数组遍历之前必须满足某些条件,对吧?使用这两种句法糖可能更合适。

// for breaklet ary = [1, 2, 3, 4, 5];for (let i=0; i< ary.length; i++)// output// 0// 1// 2// 3// --// for continuefor (let i=0; i< ary.length; i++)console.log('after=', i);} 输出 请注意,没有 after=3 before= 0 after= 0 before= 1 after= 1 before= 2 after= 2 before= 3 before= 4 after= 4 after= 4
// for/of breaklet ary = [1, 2, 3, 4, 5];for (let o of ary) ;// output// 1// 2// 3// --// for/of continuefor (let o of ary) ;console.log('after=', o);} 输出 请注意,没有 after=3 before= 1 after= 1 before= 2 after= 2 after= 2 before= 3 before= 4 after= 4 before= 5 after= 5 after= 5
参考上面的用法,不再重复。

这两种方法与以下方面有关:forfor/of需要注意的区别在于它们破坏了语法return它不能使用breakcontinue

相似文章

    如何输入数组,你知道这些技巧吗?

    在编程中,数组是一种常见的数据结构,用于存储一系列有序元素。在不同的编程语言中,输入数组的方法会有所不同,但基本概念和思想是相似的。下面我将提供一些输入数组的基本步骤和常见技巧,希望对您有所帮助。指定数组的维度 在使用数组之前,您需要清楚数组的维度。对于一维数组,您可以简单地创建一个元素列表 对于多...

    快船队从6连败变成了7连败!你可能没有注意到有一个人只打了 0 分钟

    在连败之后,钳团队进行了一系列调整,成功扭转了局面。最重要的变化是改变首发阵容,让威斯布鲁克替补出场曼成为首发。此调整使硬化再次发挥他的作用,通过他的组织和领导能力,团队的整体效率得到了显着提高。另外钳阵容也进行了调整,部分球员被弃用,进一步提升了球队的战斗力。为了应对连败的窘境,钳球队采取了改变首...

    快船队从6连败变成了7连败!你可能没有注意到,有一个人只打了 0 秒

    钳该团队目前在nba他们在联赛中表现出色,取得了连胜,但在此之前,他们经历了六连败的艰难时期。特别硬化在加盟后的五场比赛中钳球队的糟糕表现让很多人担心他们的前景。然而钳球队强势崛起,连败多支强队,取得七连胜。在钳他们做了哪些调整来扭转局面,从六连败到七连胜?钳球队在连败期间伦纳德场均只有分,投篮命中...

    可以让你连续4年亏损的资金

    再过个交易日,年就要结束了。不过,沪深指数也下跌了 看来 年线三阴 很可能逃不掉 今天再次筛选,看看哪些是基于最新的净资产数据连续 年甚至 年 列表在这里 恒生指数 恒生指数连续四年下跌,追踪恒生指数和H股指数的 中,有不少指数也连续四年下跌。 芙蓉 福前 这是市场上唯一的一款连续年亏损目标 更尴尬...

    泽连斯基参演战剧?你看起来不像是公司的中层领导

    俄乌战争已经持续了很长时间,不仅战争的各方和战争的支持者都不想继续下去,甚至连现在读到这篇文章的官员都没有兴趣。原因很明显,一是这场战争的结果在一开始就已经注定了,二是巴以冲突似乎更令人担忧。可以说,在乌克兰我们看到了真正的 民主 不会拳击的演员不好 乌克兰首都基辅市长是拳击冠军,领队是演员,那么泽...