安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

前端算法入门刷算法题常用的JS基础扫盲

2月2日 先锋客投稿
  介绍
  此篇属于前端算法入门系列的第一篇,主要介绍常用的数组方法、字符串方法、遍历方法、高阶函数、正则表达式以及相关数学知识。前端算法入门一:刷算法题常用的JS基础扫盲〔1〕前端算法入门二:时间空间复杂度8大数据结构的JS实现〔2〕前端算法入门三:5大排序算法2大搜索4大算法思想〔3〕前端面试算法高频100题(附答案,分析思路,一题多解)〔4〕文章主要包含以下内容:
  数组常用方法
  字符串常用方法
  常用遍历方法高阶函数
  常用正则表达式
  数学知识一、数组常用方法1。push()
  在尾部追加,类似于压栈,原数组会变。constarr〔1,2,3〕arr。push(8)console。log(arr)〔1,2,3,8〕复制代码2。pop()
  在尾部弹出,类似于出栈,原数组会变。数组的pushpop可以模拟常见数据结构之一:栈。constarr〔1,2,3〕constpopValarr。pop()console。log(popVal)3console。log(arr)〔1,2〕数组模拟常见数据结构之一:栈conststack〔0,1〕stack。push(2)压栈console。log(stack)〔0,1,2〕constpopValuestack。pop()出栈console。log(popValue)2console。log(stack)〔0,1〕复制代码3。unshift()
  在头部压入数据,类似于入队,原数组会变。constarr〔1,2,3〕arr。unshift(0)console。log(arr)〔0,1,2,3〕复制代码4。shift()
  在头部弹出数据,原数组会变。数组的push(入队)shift(出队)可以模拟常见数据结构之一:队列。constarr〔1,2,3〕constshiftValarr。shift()console。log(shiftVal)1console。log(arr)〔2,3〕数组模拟常见数据结构之一:队列constqueue〔0,1〕queue。push(2)入队console。log(queue)〔0,1,2〕constshiftValuequeue。shift()出队console。log(shiftValue)0console。log(queue)〔1,2〕复制代码5。concat()
  concat会在当前数组尾部拼接传入的数组,然后返回一个新数组,原数组不变。constarr〔1,2,3〕constarr2arr。concat(〔7,8,9〕)console。log(arr)〔1,2,3〕console。log(arr2)〔1,2,3,7,8,9〕复制代码6。indexOf()
  在数组中寻找该值,找到则返回其下标,找不到则返回1。constarr〔1,2,3〕console。log(arr。indexOf(2))1console。log(arr。indexOf(0))1复制代码7。includes()
  在数组中寻找该值,找到则返回true,找不到则返回false。constarr〔1,2,3〕console。log(arr。includes(2))trueconsole。log(arr。includes(4))false复制代码8。join()
  将数组转化成字符串,并返回该字符串,不传值则默认逗号隔开,原数组不变。constarr〔1,2,3〕console。log(arr。join())‘1,2,3’console。log(arr)〔1,2,3〕复制代码9。reverse()
  翻转原数组,并返回已完成翻转的数组,原数组改变。constarr〔1,2,3〕console。log(arr。reverse())〔3,2,1〕console。log(arr)〔3,2,1〕复制代码10。slice(start,end)
  从start开始截取到end,但是不包括endconstarr〔1,2,3,4,5〕console。log(arr。slice(1,4))〔2,3,4〕console。log(arr)〔1,2,3,4,5〕复制代码11。splice(start,deleteCount,item1,item2)start参数开始的位置deleteCount要截取的个数后面的items为要添加的元素如果deleteCount为0,则表示不删除元素,从start位置开始添加后面的几个元素到原始的数组里面。返回值为由被删除的元素组成的一个数组。如果只删除了一个元素,则返回只包含一个元素的数组。如果没有删除元素,则返回空数组。这个方法会改变原始数组,数组的长度会发生变化constarr3〔1,2,3,4,5,6,7,f1,f2〕;constarr4arr3。splice(2,3)删除第三个元素以后的三个数组元素(包含第三个元素)console。log(arr4);〔3,4,5〕;console。log(arr3);〔1,2,6,7,f1,f2〕;原始数组被改变constarr5arr3。splice(2,0,wu,leon);从第2位开始删除0个元素,插入wu,leonconsole。log(arr5);〔〕返回空数组console。log(arr3);〔1,2,wu,leon,6,7,f1,f2〕;原始数组被改变constarr6arr3。splice(2,3,xiao,long);从第2位开始删除3个元素,插入xiao,longconsole。log(arr6);〔wu,leon,6〕console。log(arr3);〔1,2,xiao,long,7,f1,f2〕constarr7arr3。splice(2);从第三个元素开始删除所有的元素console。log(arr7);〔xiao,long,7,f1,f2〕console。log(arr3);〔1,2〕复制代码12。sort()对数组的元素进行排序,并返回数组。默认排序顺序是在将元素转换为字符串,然后比较它们的UTF16代码单元值序列时构建的。由于它取决于具体实现,因此无法保证排序的时间和空间复杂性。
  可参考MDN:Sort〔5〕constarr〔1,2,3〕arr。sort((a,b)ba)console。log(arr)〔3,2,1〕复制代码13。toString()
  将数组转化成字符串,并返回该字符串,逗号隔开,原数组不变。constarr〔1,2,3,4,5〕console。log(arr。toString())‘1,2,3,4,5’console。log(arr)〔1,2,3,4,5〕复制代码二、字符串常用方法1。charAt()
  返回指定索引位置处的字符。类似于数组用中括号获取相应下标位置的数据。varstrabcdefgconsole。log(str。charAt(2))输出cconsole。log(str〔2〕)输出c复制代码2。concat()
  类似数组的concat(),用来返回一个合并拼接两个或两个以上字符串。原字符串不变。conststr1abcdefgconststr21234567conststr3str1。concat(str2)console。log(str3)输出abcdefg1234567复制代码3。indexOf()、lastIndexOf()
  indexOf,返回一个字符在字符串中首次出现的位置,lastIndexOf返回一个字符在字符串中最后一次出现的位置。conststrabcdcefcgconsole。log(str。indexOf(c))输出2console。log(str。lastIndexOf(c))输出7复制代码4。slice()
  提取字符串的片断,并把提取的字符串作为新的字符串返回出来。原字符串不变。conststrabcdefgconsole。log(str。slice())输出abcdefg,不传递参数默认复制整个字符串console。log(str。slice(1))输出bcdefg,传递一个,则为提取的起点,然后到字符串结尾console。log(str。slice(2,str。length1))输出cdef,传递两个,为提取的起始点和结束点复制代码5。split()
  使用指定的分隔符将一个字符串拆分为多个子字符串数组并返回,原字符串不变。conststrABCDEFGconsole。log(str。split())输出〔A,B,C,D,E,F,G〕复制代码6。substr(),substring()这两个方法的功能都是截取一个字符串的片段,并返回截取的字符串。substr和substring这两个方法不同的地方就在于参数二,substr的参数二是截取返回出来的这个字符串指定的长度,substring的参数二是截取返回这个字符串的结束点,并且不包含这个结束点。而它们的参数一,都是一样的功能,截取的起始位置。注意事项:substr的参数二如果为0或者负数,则返回一个空字符串,如果未填入,则会截取到字符串的结尾去。substring的参数一和参数二为NAN或者负数,那么它将被替换为0。conststrABCDEFGHIJKLMNconsole。log(str。substr(2))输出CDEFGHIJKLMNconsole。log(str。substring(2))输出CDEFGHIJKLMNconsole。log(str。substr(2,9))输出CDEFGHIJKconsole。log(str。substring(2,9))输出CDEFGHI复制代码7。match()
  match()方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配,并返回一个包含该搜索结果的数组。conststr2018年结束了,2019年开始了,2020年就也不远了constregdg这里是定义匹配规则,匹配字符串里的1到多个数字console。log(str。match(reg))输出符合匹配规则的内容,以数组形式返回〔2018,2019,2020〕console。log(str。match(20))不使用正则〔20,index:0,input:2018年结束了,2019年开始了〕复制代码
  注意事项:如果match方法没有找到匹配,将返回null。如果找到匹配,则match方法会把匹配到以数组形式返回,如果正则规则未设置全局修饰符g,则match方法返回的数组有两个特性:input和index。input属性包含整个被搜索的字符串。index属性包含了在整个被搜索字符串中匹配的子字符串的位置。8。replace()
  replace接收两个参数,参数一是需要替换掉的字符或者一个正则的匹配规则,参数二,需要替换进去的字符,仔实际的原理当中,参数二,你可以换成一个回调函数。conststr2018年结束了,2019年开始了,2020年就也不远了constrexdg这里是定义匹配规则,匹配字符串里的1到多个数字conststr1str。replace(rex,)console。log(str1)输出:年结束了,年开始了,年也不远了conststr2str。replace(rex,function(item){console。log(arguments)看下面的图片constarr〔零,壹,贰,叁,肆,伍,陆,柒,捌,玖〕letnewStritem。split()。map(function(i){newStrarr〔i〕})returnnewStr})console。log(str2)输出:贰零壹捌年结束了,贰零壹玖年开始了,贰零贰零年也不远了复制代码9。search()
  在目标字符串中搜索与正则规则相匹配的字符,搜索到,则返回第一个匹配项在目标字符串当中的位置,没有搜索到则返回一个1。conststr2018年结束了,2019年开始了,2020年就也不远了constregdi这里是定义匹配规则,匹配字符串里的1到多个数字console。log(str。search(reg))输出0这里搜索到的第一项是从位置0开始的复制代码10。toLowerCase(),toUpperCase()
  toLowerCase把字母转换成小写,toUpperCase()则是把字母转换成大写。conststr1abcdefgconststr2ABCDEFGconsole。log(str2。toLowerCase())输出:abcdefgconsole。log(str1。toUpperCase())输出:ABCDEFG复制代码11。includes(),startsWith(),endsWith()
  includes、startsWith、endsWith,es6的新增方法,includes用来检测目标字符串对象是否包含某个字符,返回一个布尔值,startsWith用来检测当前字符是否是目标字符串的起始部分,相对的endwith是用来检测是否是目标字符串的结尾部分。conststrExcuseme,howdoIgettoparkroad?console。log(str。includes(how))输出:trueconsole。log(str。startsWith(Excuse))输出:trueconsole。log(str。endsWith(?))输出:true复制代码12。repeat()
  返回一个新的字符串对象,新字符串等于重复了指定次数的原始字符串。接收一个参数,就是指定重复的次数。原字符串不变。conststrhttpconststr2str。repeat(3)console。log(str)输出:httpconsole。log(str2)输出:httphttphttp复制代码三、常用遍历方法高阶函数1。for()
  最常用的for循环,经常用的数组遍历,也可以遍历字符串。constarr〔1,2,3〕conststrabcfor(leti0;iarr。i){console。log(arr〔i〕)console。log(str〔i〕)}复制代码2。while()dowhile()
  while、dowhile主要的功能是,当满足while后边所跟的条件时,来执行相关业务。这两个的区别是,while会先判断是否满足条件,然后再去执行花括号里面的任务,而dowhile则是先执行一次花括号中的任务,再去执行while条件,判断下次还是否再去执行do里面的操作。也就是说dowhile至少会执行一次操作。while(条件){执行。。。}do{执行。。。}while(条件)复制代码3。forEach()
  拷贝一份遍历原数组。return无法终止循环。不过可以起到continue效果。本身是不支持的continue与break语句的我们可以通过some和every来实现。constarr〔5,1,3,7,4〕arr。forEach((item,index){if(item2)returnconsole。log(索引:{index},数值:{item})arr〔5〕0})console。log(arr)打印结果:索引:0,数值:5索引:2,数值:3索引:3,数值:7索引:4,数值:4〔5,1,3,7,4,0〕复制代码4。for。。。infor。。。in是ES5标准,此方法遍历数组效率低,主要是用来循环遍历对象的属性。遍历数组的缺点:数组的下标index值是数字,forin遍历的index值0,1,2等是字符串。Object。defineProperty,建立的属性,默认不可枚举。constfoo{name:bar,sex:male}Object。defineProperty(foo,age,{value:18})for(constkeyinfoo){console。log(可枚举属性:{key})}console。log(age属性:{foo。age})打印结果:可枚举属性:name可枚举属性:sexage属性:18复制代码5。for。。。of
  forof是ES6新增的方法,但是forof不能去遍历普通的对象,forof的好处是可以使用break跳出循环。forof这个方法避开了forin循环的所有缺陷与forEach()不同的是,它可以正确响应break、continue和return语句forof循环不仅支持数组,还支持大多数类数组对象,例如DOMNodeList对象〔6〕。forof循环也支持字符串遍历forof循环直接得到的就是值constarr〔1,2,3〕for(constvalueofarr){console。log(value)}复制代码
  面试官:说一下for。。。in和for。。。of区别?(1)forin用于可枚举数据,如对象、数组、字符串(2)forof用于可迭代数据,如数组、字符串、Map、Set复制代码6。everysome
  返回一个布尔值。当我们需要判定数组中的元素是否满足某些条件时,可以使用everysome。这两个的区别是,every会去判断判断数组中的每一项,而some则是当某一项满足条件时返回。everyconstfoo〔5,1,3,7,4〕。every((item,index){console。log(索引:{index},数值:{item})returnitem2})console。log(foo)every打印:索引:0,数值:5索引:1,数值:1false复制代码someconstfoo〔5,1,3,7,4〕。some((item,index){console。log(索引:{index},数值:{item})returnitem2})console。log(foo)some打印:索引:0,数值:5true复制代码7。filter()filter方法用于过滤数组成员,满足条件的成员组成一个新数组返回。它的参数是一个函数,所有数组成员依次执行该函数,返回结果为true的成员组成一个新数组返回。该方法不会改变原数组。constfoo〔5,1,3,7,4〕。filter((item,index){console。log(索引:{index},数值:{item})returnitem2})console。log(foo)打印结果:索引:0,数值:5索引:1,数值:1索引:2,数值:3索引:3,数值:7索引:4,数值:4〔5,3,7,4〕复制代码8。map()map即是映射的意思,原数组被映射成对应新数组。map:支持return,相当与原数组克隆了一份,把克隆的每项改变了,也不影响原数组。constfoo〔5,1,3,7,4〕。map((item,index){console。log(索引:{index},数值:{item})returnitem2})console。log(foo)打印结果:索引:0,数值:5索引:1,数值:1索引:2,数值:3索引:3,数值:7索引:4,数值:4〔7,3,5,9,6〕复制代码9。reduce()reduceRight()
  reduce从左到右将数组元素做叠加处理,返回一个值。reduceRight从右到左。constfoo〔5,1,3,7,4〕。reduce((total,cur){console。log(叠加:{total},当前:{cur})returntotalcur})console。log(foo)打印结果:叠加:5,当前:1叠加:6,当前:3叠加:9,当前:7叠加:16,当前:420复制代码10。Object,keys遍历对象的属性
  Object。keys方法的参数是一个对象,返回一个数组。该数组的成员都是该对象自身的(而不是继承的)所有属性名,且只返回可枚举的属性。constobj{p1:123,p2:456};Object。keys(obj)〔p1,p2〕复制代码11。Object。getOwnPropertyNames()遍历对象的属性
  Object。getOwnPropertyNames方法与Object。keys类似,也是接受一个对象作为参数,返回一个数组,包含了该对象自身的所有属性名。但它能返回不可枚举的属性。constarr〔Hello,World〕;Object。keys(arr)〔0,1〕Object。getOwnPropertyNames(arr)〔0,1,length〕复制代码以上遍历方法的区别:一:map(),forEach(),filter()循环的共同之处:1。forEach,map,filter循环中途是无法停止的,总是会将所有成员遍历完。2。他们都可以接受第二个参数,用来绑定回调函数内部的this变量,将回调函数内部的this对象,指向第二个参数,间接操作这个参数(一般是数组)。二:map()、filter()循环和forEach()循环的不同:forEach循环没有返回值;map,filter循环有返回值。三:map()和filter()都会跳过空位,for和while不会四:some()和every():some()只要有一个是true,便返回而every()只要有一个是false,便返回false。五:reduce(),reduceRight():reduce是从左到右处理(从第一个成员到最后一个成员),reduceRight则是从右到左(从最后一个成员到第一个成员)。六:Object对象的两个遍历Object。keys与Object。getOwnPropertyNames:他们都是遍历对象的属性,也是接受一个对象作为参数,返回一个数组,包含了该对象自身的所有属性名。但Object。keys不能返回不可枚举的属性;Object。getOwnPropertyNames能返回不可枚举的属性。复制代码四、常用正则表达式
  这里罗列一些我在刷算法题中遇到的正则表达式,如果有时间可认真学一下正则表达式不要背〔7〕。1。判断字符由26个英文字母组成的字符串:〔AZaz〕由26个大写英文字母组成的字符串:〔AZ〕由26个小写英文字母组成的字符串:〔az〕由数字和26个英文字母组成的字符串:〔AZaz09〕复制代码2。判断数字数字:〔09〕复制代码
  持续更新,敬请期待五、数学知识1。质数
  若一个正整数无法被除了1和它自身之外的任何自然数整除,则称该数为质数(或素数),否则称该正整数为合数。functionjudgePrime(n){for(leti2;i){if(ni0)returnfalse}returntrue}复制代码2。斐波那契数列functionFibonacci(n){if(n1)returnnreturnFibonacci(n1)Fibonacci(n2)}复制代码
投诉 评论 转载

安排上了!FindX3Pro尝鲜安卓12Beta4,Colo尽管Android12已经发布已经有一段时间了,但是由于谷歌要将其用在自家的Pixel手机上面,因此一直都没有开始大规模推送。不过最近传来好消息,据XDA报道,Android1……Oracle学习笔记1。查找数据库中的实例,可以查看oracle数据库中所有实例的信息,如:SELECTFROMallobjectswhereobjecttypeTABLE;表示将or……22岁何同学打脸苹果,复活Airpower狂揽5。5亿?22岁北邮男孩,以一句我做了苹果放弃的产品。。。引爆B站他就是B站up主老师好我叫何同学,相信不少人也听说过他!2019年他发布的视频《有多快?5G在日常使用中的真……外卖员为何频繁上热搜?外卖小哥真的是社会底层?你们有没有发现一个奇怪的现象?美团、饿了么算不算得上是科技公司?所谓的科技只不过是资本的幌子。披着羊皮的狼,没能改变底层劳动人民的生活,他们关心的仅仅是工资、社保、学生的……长白时评对新电商最好的致敬就是拥抱新电商的种种惊人作用力,即将召开的首届中国新电商大会给出一系列展示。互联网乡村振兴创新发展、跨境电商高质量发展、新电商与传统产业数字化发展、新电商时代下的冰雪经济产业发展……搜狗创始人王小川的创业故事1990年,王小川以第一名的成绩,进入成都七中的综合数学实验班,并遇到了恩师谢晋超。在谢晋超的带领下,王小川等几名同学取得了不错成果,获得了亿利达青少年发明奖。1996年……影像体验解读OPPOReno6超大杯会是你的Vlog之机么?在手机影像系统越来越发达的今天,不少人都会用自己的手机记录下生活中的瞬间。不过,有些人却因为不会化妆,而没有胆量站在镜头前。随着科技的进步,我们也有了很多现代的科技手段能够解决……未老眼先衰,你有手机老花眼症状吗?未老眼先衰,这个未老不知楼主是多大年龄为限。我算不算楼主所指的未老。四十一二岁的时候,眼睛开始有花眼的征兆,随着年龄的增大,看手机时间的拉长,短短不到十年的光景,花眼度数从开始……C语言程序设计试题C语言程序设计试卷一、单项选择题(每题1分,共20分)1。C语言规定:在一个源程序中,main函数的位置()。A。必须在最开始B。必须在系统调用的库函数……前端算法入门刷算法题常用的JS基础扫盲介绍此篇属于前端算法入门系列的第一篇,主要介绍常用的数组方法、字符串方法、遍历方法、高阶函数、正则表达式以及相关数学知识。前端算法入门一:刷算法题常用的JS基础扫盲〔1〕……一加9R一款实至名归的品质旗舰五月份即将结束,这意味着离一年一度的618狂欢大促越来越近了。相信有不少小伙伴已经备好钱包准备淘宝。在手机圈同样如此,不少等等们等的就是这一刻,不过在618到来前,还得为自己挑……如何理解丑人多上镜,美人不上镜这句话?不知道,反正我知道我丑,上不上镜都还是丑一般小脸上镜,这也就是为什么现在都整成锥子脸的缘故,而锥子脸真人是不好看的,而真正好看的鹅蛋脸标准东方美人脸,如果角度不对确实上镜……
iOS15。0正式版续航测试,又有系统关闭验证你的身份证很可能被别人绑定了微信支付8年米粉破防!MIUI这操作真的没救了苹果8p在安卓中相当于什么级别?为啥淘宝上2块钱的螺丝都敢包邮,难道不怕亏本吗TMT时报工信部将进一步督促电信企业改善资费方案微信支付表示早高FENGiPadmini6采用降频版的A15芯片库克入选关于JavaScript的ES6模块化速记联想确认不参加CES线下展会通过直播方式如期发布新品佳能全画幅单反和微单相机各有什么优缺点?哪款型号值得入手?11UltraMIUI12。5开发版内测升级安卓12版本未来iPadPro黑科技曝光,iPadmini5让路新机跌至如何看待1岁女孩55万天价医疗费成功人士的35个语言沟通技巧暴汗服可以日常穿吗哪四种员工,让老板非常讨厌?刘强东俞敏洪给你答案告别2021愿今年所有的遗憾,都是2022年惊喜的铺垫紫檀造句用紫檀造句大全鼓浪屿必打卡景点有哪些鼓浪屿必打卡有什么景点心累不相信人的说说煮牛肉放什么调料?煮牛肉的正确方法完了,被他们整破防了传承中华优秀家风家训的路径及其当代价值大学心理委员个人总结范文

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利