js常用数组、字符串、遍历方法、高阶函数、正则表达式以及相关数学知识_lalaxuan的博客-爱代码爱编程
文章目录
数组常用方法
push()
在尾部追加,类似于压栈,原数组会变。
pop()
尾部弹出,类似出栈,原数组会变。
数组的push()和pop()可以模拟常见的数据结构之一:栈
unshift()
在头部压入数据,类似于入队,原数组会变。
shift()
在头部弹出数据,原数组会变。
数组的push和shift可以模拟常见的数据结构之一:队列
concat()
concat会在当前数组尾部拼接传入的数组,然后返回一个新的数组,原数组不变。
indexOf()
在数组中寻找该值,找到则返回其下标,找不到则返回-1。
includes()
在数组中寻找该值,找到则返回true,找不到则返回false。
join()
将数组转化成字符串,并返回该字符串,不传值则默认逗号隔开,原数组不变。
reverse()
翻转原数组,并返回已完成翻转的数组,原数组改变。
slice(start, end)
从start
开始截取到end
,但是不包括end
,原数组不改变。
splice(start, deleteCount,item1,item2…)
start
参数开始的位置
deleteCount
要截取的个数
后面items
为要添加的元素
如果deleteCount
为0,则表示不删除元素,从start
位置开始添加后面的几个元素到原始的数组里面。
返回值为由被删除元素组成的一个数组。如果没删除元素,则返回空数组。
这个方法改变了原数组,数组的长度会发生变化。
sort()
对数组的元素进行排序,并返回数组。
默认排序顺序是在将元素转换为字符串,然后比较他们的UTF-16代码单元值序列时构建的。
改变了原数组
字符串常用方法
charAt()
返回指定索引位置处的字符。
类似数组中用中括号获取对应下标位置的数据。
concat()
类似数组的concat(),用来返回一个合并拼接两个或两个以上字符串。
原字符串不变。
indexOf()、lastIndexOf()
indexOf
,返回一个字符在字符串中首次出现的位置,lastIndexOf
返回一个字符在字符串中最后一次出现的位置。
slice()
提取字符串的片段,并把提取的字符串作为新的字符串返回出来。
原字符串不变。
split()
使用指定的分隔符将一个字符串拆分为多个子字符串数组并返回,原字符串不变
substr(),substring()
- 这两个方法的功能都是截取一个字符串的片段,并返回截取的字符串。
- substr和substring这两个方法不同的地方就在于参数二,substr的参数二是截取返回出来的这个字符串指定的长度,substring的参数二是截取返回这个字符串的结束点,并且不包含这个结束点。而它们的参数一,都是一样的功能,截取的起始位置。
- 注意事项:substr的参数二如果为0或者负数,则返回一个空字符串,如果未填入,则会截取到字符串的结尾去。substring的参数一和参数二为NAN或者负数,那么它将被替换为0。
match()
match()方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配,并返回一个包含该搜索结果的数组。
注意事项:如果
match
方法没有找到匹配,将返回null
。如果找到匹配,则 match
方法会把匹配到以数组形式返回,如果正则规则未设置全局修饰符g,则 match方法返回的数组有两个特性:input和index。input属性包含整个被搜索的字符串。index属性包含了在整个被搜索字符串中匹配的子字符串的位置。
replace()
replace接收两个参数,参数一是需要替换掉的字符或者一个正则的匹配规则,参数二,需要替换进去的字符,仔实际的原理当中,参数二,你可以换成一个回调函数。
search()
在目标字符串中搜索与正则规则相匹配的字符,搜索到,则返回第一个匹配项在目标字符串当中的位置,没有搜索到则返回一个-1。
toLowerCase(),toUpperCase()
toLowerCase把字母转换成小写,toUpperCase()则是把字母转换成大写。
includes(), startsWith(), endsWith()
includes
、startsWith
、endsWith
,es6的新增方法,includes 用来检测目标字符串对象是否包含某个字符,返回一个布尔值,startsWith用来检测当前字符是否是目标字符串的起始部分,相对的endwith是用来检测是否是目标字符串的结尾部分。
const str = "can i help you?"
console.log(str.includes('i')) //true
console.log(str.startWith('can')) // true
console.log(str.endWith('?')) // true
repeat()
返回一个新的字符串对象,新字符串等于重复了指定次数的原始字符串。接收一个参数,就是指定重复的次数。原字符串不变。
常用的遍历方法&高阶函数
for()
最常用的for循环,经常用的数组遍历,也可以遍历字符串。
while() / do while()
while、do while主要的功能是,当满足while后边所跟的条件时,来执行相关业务。这两个的区别是,while会先判断是否满足条件,然后再去执行花括号里面的任务,而do while则是先执行一次花括号中的任务,再去执行while条件,判断下次还是否再去执行do里面的操作。也就是说 do while至少会执行一次操作。
while(条件){
执行...
}
------------
do{
执行...
}
while(条件)
forEach()
拷贝一份遍历原数组。
return无法终止循环。不过可以起到continue效果。
本身是不支持的continue与break语句的我们可以通过some和 every来实现。
for…in
- for…in 是 ES5 标准, 此方法遍历数组效率低,主要是用来循环遍历对象的属性。
- 遍历数组的缺点:数组的下标index值是数字,for-in遍历的index值"0",“1”,"2"等是字符串。
- Object.defineProperty,建立的属性,默认不可枚举。
for…of
-
for…of是ES6新增的方法,但是for…of不能去遍历普通的对象,for…of的好处是可以使用break跳出循环。
-
for-of这个方法避开了for-in循环的所有缺陷
-
与forEach()不同的是,它可以正确响应break、continue和return语句
-
for-of循环不仅支持数组,还支持大多数类数组对象,例如DOM NodeList对象。
-
for-of循环也支持字符串遍历
面试官:说一下 for…in 和 for…of 区别?
- (1)for…in 用于可枚举数据,如对象、数组、字符串
- (2)for…of 用于可迭代数据,如数组、字符串、Map、Set
every/some
返回一个布尔值。当我们需要判定数组中的元素是否都满足某些条件时,可以使用every / some。这两个的区别是,every会去遍历判断是否数组中的每一项都满足条件,遇到不满足的直接停止遍历返回false,而 some则是当某一项满足条件时停止遍历,返回true。
filter()
filter方法用于过滤数组成员,满足条件的成员组成一个新数组返回。
它的参数是一个函数,所有数组成员依次执行该函数,返回结果为true的成员组成一个新数组返回。
该方法不会改变原数组。
map()
map即是 “映射”的意思 ,原数组被“映射”成对应新数组。
map:支持return,相当与原数组克隆了一份,把克隆的每项改变了,也不影响原数组。
reduece()/reduceRight()
reduce
从左到右将数组元素做“叠加”处理,返回一个值。reduceRight
从右到左。
Object.keys遍历对象的属性
Object.keys方法的参数是一个对象,返回一个数组。该数组的成员都是该对象自身的(而不是继承的)所有属性名,且只返回可枚举的属性。
Object.getOwnPropertyNames() 遍历对象的属性
Object.getOwnPropertyNames
方法与Object.keys
类似,也是接受一个对象作为参数,返回一个数组,包含了该对象自身的所有属性名。但它能返回不可枚举的属性。
以上遍历方法的区别:
一:map(),forEach(),filter()循环的共同之处:
1.forEach,map,filter循环中途是无法停止的,总是会将所有成员遍历完。
2.他们都可以接受第二个参数,用来绑定回调函数内部的 this 变量,将回调函数内部的 this 对象,指向第二个参数,间接操作这个参数(一般是数组)。
二:map()、filter()循环和forEach()循环的不同:
forEach 循环没有返回值; map,filter 循环有返回值。
三:map()和filter()都会跳过空位,for 和 while 不会
四:some()和every():
some()只要有一个是true,便返回true;而every()只要有一个是false,便返回false.
五:reduce(),reduceRight():
reduce是从左到右处理(从第一个成员到最后一个成员),reduceRight则是从右到左(从最后一个成员到第一个成员)。
六:Object对象的两个遍历 Object.keys 与 Object.getOwnPropertyNames:
他们都是遍历对象的属性,也是接受一个对象作为参数,返回一个数组,包含了该对象自身的所有属性名。但Object.keys不能返回不可枚举的属性;Object.getOwnPropertyNames能返回不可枚举的属性。
常用正则表达式
这里罗列一些我在刷算法题中遇到的正则表达式,如果有时间可认真学一下正则
1.判断字符
由26个英文字母组成的字符串:^[A-Za-z]+$
由26个大写英文字母组成的字符串:^[A-Z]+$
由26个小写英文字母组成的字符串:^[a-z]+$
由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
判断数字
数字:^[0-9]*$
数学知识
1.质数
若一个正整数无法被除了1 和它自身之外的任何自然数整除,则称该数为质数(或素数),否则称该正整数为合数。
function judgePrime(n) {
for (let i = 2; i * i <= n; i++) {
if (n % i == 0) return false
}
return true
}
2.斐波那契数列
function Fibonacci(n) {
if (n <= 1) return n
return Fibonacci(n - 1) + Fibonacci(n - 2)
}