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

http://www.conardli.top/docs/algorithm/%E6%8E%92%E5%BA%8F/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F.html#%E6%80%9D%E6%83%B3

阅读剩余
THE END