JavaScript刷题方法总结
数组
数组的foreach、filter、map、find
forEach
功能: 循环遍历数组中的每一项,只能遍历数组
写法:
数组对象.forEach(function(参数变量名1,参数变量名2,参数变量名3)){
// 做一些操作,forEach是没有返回值,返回值为undefined
})
复制代码
特点
callback函数,为数组中每个元素执行的函数,该函数接收三个参数
- 变量参数名1表示的是数组中的项值(数组当前项的值)
- 变量参数名2表示的是索引(数组当前项的索引)
- 变量参数名3表示原数组(数组对象本身)
filter
功能
经过filter函数后会创建一个新的数组, 回调函数返回的结果一个boolean
值,若结果为真,则返回匹配的项,若为假,则返回一个空数组,它不会改变原有数组,返回的是过滤后的新数组
find
功能:
用来查找目标元素,若找到就返回该元素,若找不到就返回undefined,同样不会改变原有数组
map
功能:循环遍历数组中的每一项,也只能遍历数组
分隔数组-slice、splice
slice()
let abc = [1, 2, 3, 4, 5, 6];
console.log(abc.slice(1, 3)); // [ 2, 3 ] 前闭后开,取下标1,2
console.log(abc.slice(1)); // [ 2, 3, 4, 5, 6 ] 取下标1开始,所有的子数组
console.log(abc.slice(-2)); // [ 5, 6 ] 从倒数第二2个元素开始,取所有的子数组
slice()
方法并不会修改数组,而是返回一个子数组。
splice()
let abc = [1, 2, 3, 4, 5, 6];
console.log(abc.splice(2, 2)); // [ 3, 4 ] 从下标2开始,删除2个,并返回被删除的元素
console.log(abc); // [ 1, 2, 5, 6 ] 改变了原数组
console.log(abc.splice(3, 0, 9)); // 在下标3的位置插入9,后面的元素后移
console.log(abc); // [ 1, 2, 5, 9, 6 ]
splice()
方法会直接对数组进行修改。
分割字符串split()
新的数组 = str.split(分隔符);
通过指定的分隔符(可以为空字符串''),将一个字符串拆分成一个数组。不会改变原字符串。
数组sort()排序方法
const arr = [49, 5, 14, 89, 71, 3, 10];
// 一般写法
arr.sort(function (a, b) {
return a - b; // 按照升序排列
});
// 箭头函数
arr.sort((a, b) => a - b);
// 结果 [3, 5, 10, 14, 49, 71, 89]
以上是按照升序排列的写法,如果要按照降序排列,只需把比较函数中的 return a - b;
改为 return b - a;
。如果是按字符串排不用传参数。
数组reduce()方法
Array.reduce()
接受两个参数:一个是对数组每个元素执行的回调方法,一个是初始值。
var myNewArray = [].reduce(function (accumulator, current) {
return accumulator;//可供迭代的值
}, starting);
// 累加
[1, 2, 3, 4, 5, 6, 7, 8].reduce((a, i) => a + i);//i为当前值
// 输出:36
// 累加,默认一个初始值
[1, 2, 3, 4, 5, 6, 7, 8].reduce((a, i) => a + i, 5);
// 输出:41
// 累乘
[1, 2, 3, 4, 5, 6, 7, 8].reduce((a, i) => a * i);
// 输出:40320
找指定值找数组的索引
index = [1,3,4,5,6,7,1111].indexOf(1111) // index等于7
不用for遍历
找出数组最大值
[1, 2, 3, 4, 5, 6, 7, 8].reduce((a, i) => Math.max(a, i));
Math.max(...[1, 2, 3, 4, 5, 6, 7, 8]);
数组连接为字符串-join
let arr = ['a', 'b', 'c'];
console.log(arr.join('')); // abc
console.log(arr.join('-')); // a-b-c
join()
方法将数组连接为字符串。
- 将数组转换为字符串,返回转换后的字符串
- 不会改变原来的数组
join()
方法可以指定一个字符串(可以为空字符串)作为参数,其将会成为数组中元素的连接符;
如果不指定连接符,则默认使用 ,
作为连接符,此时和 toString()的效果是一致的
。
Math 对象
静态方法
Math
对象提供以下一些静态方法。
Math.abs()
:绝对值Math.ceil()
:向上取整Math.floor()
:向下取整Math.max()
:最大值Math.min()
:最小值Math.pow()
:幂运算Math.sqrt()
:平方根Math.log()
:自然对数Math.exp()
:e
的指数Math.round()
:四舍五入Math.random()
:随机数
Map和Set结构
Map
Map
对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。构造函数Map
可以接受一个数组作为参数。
- set(key, val): 向Map中添加新元素
- get(key): 通过键值查找特定的数值并返回
- has(key): 判断Map对象中是否有Key所对应的值,有返回true,否则返回false
Set
Set
对象允许你存储任何类型的值,无论是原始值或者是对象引用。它类似于数组,但是成员的值都是唯一的,没有重复的值。
add(value)
:添加某个值,返回 Set 结构本身(可以链式调用)。delete(value)
:删除某个值,删除成功返回true
,否则返回false
。has(value)
:返回一个布尔值,表示该值是否为Set的成员。
https://juejin.cn/post/6844904175562653710#heading-46
https://juejin.cn/post/6856546833025237006#heading-13