马上开学就要大四了,也就意味着要面临就业了。接触前端东西也已经有一年多了,做了很多,但是在面试的过程中,总免不了被问算法,之前也一直不重视,认为目前开发也用不着还不如多问我点原生js,现在观念有一些转变,行业这么卷,肯定得有一些手段筛人,而算法也算是众多公司常用的手段吧,这个也能决定你的base,所以,人家既然要求,那我们也就不要反感。尽可能的提高自己,不管用不用,只要你要,我就有。
先从最基础的数据结构开始:
数组
一般我们定义数组:
或者
let c = Array.from('foo124')
console.log(c) //["f", "o", "o", "1", "2", "4"]
再或者
const arr = (new Array(7)).fill(1) //[1, 1, 1, 1, 1, 1, 1]
fill方法是为初始化的数组填上数据
当我们修改的时候只需要
arr[1] = 2
console.log(arr) //[1, 2, 1, 1, 1, 1, 1]
当我们初始化数组填入的是空数组的话
const arr = (new Array(7)).fill([])
console.log(arr) //[Array(0), Array(0), Array(0), Array(0), Array(0), Array(0), Array(0)]
当我们给二维数组赋值的时候会发现
arr[0][0] = 1
console.log(arr)

其实我们在使用fill给数组赋值[]的时候,传入的值是一个指针,这些指针指向的是同一块内存地址。其实在这我们可以想一下深浅拷贝的问题。有兴趣自己去查一查或者看一下我的博客,我之前也说过。
数组的特点
其实数组的特点就是连续存储,我们定义一个数组,他在内存开辟了一段连续的内存空间,这点可以作为和链表的区别哈,先提前透一下。
数组的遍历
- for循环
const arr = [1,2,3,4,5]
for(let i = 0;i<arr.length;i++){
console.log(arr[i])
}
- forEach
const arr = [1,2,3,4,5]
arr.forEach(item=>{
console.log(item)
})
- map
const arr = [1,2,3,4,5]
let c = arr.map(item=>{
return item
})
console.log(c)
forEach和map区别
他们两个都是遍历数组的方法,不过forEach会改变原数组,map不会改变原数组,会返回一个新数组。一般我们采用map方法的时候会对遍历数据进行再加工。
数组方法
-
shift
删除数组首部的第一个元素(只能删一个,里边传参没用),改变原数组,返回删除的元素
-
unshift
从数组首部添加元素(几个任意),改变原数组,返回改变后数组的长度。
-
pop
删除数组的最后一个元素。改变原数组,返回删除的元素
-
push
向数组的末尾添加一个或多个元素 改变原数组,返回改变后数组的长度。
-
filter
匹配数组中每一项,将满足条件的那一项作为新数组返回,不会改变原数组
-
every
对数组中所有元素进行判断返回一个布尔值,如果所有元素都满足则返回true,否则返回false
-
some
对数组中元素进行判断,如果数组中有一个元素满足条件则返回true否则返回false
-
.concat
合并两个数组,不改变原数组,返回合并后的新数组
-
join
将数组转为字符串,不改变原数组,返回字符串
-
sort
对数组进行排序,改变原数组,返回的也是排序后的数组。
-
toString
把数组转成字符串([1,2,3]->“1,2,3”),不改变原数组,返回的是字符串
-
reduce
接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
-
Array.isArray
判断是不是一个数组,返回布尔值
-
Array.from
一般用来创建数组,或者对数组进行操作接收三个参数,第一个是可迭代对象,第二个函数可选(对每一个元素进行什么样的操作)第三个可选是执行函数时的this对象
大致就是这些吧!
队列
队列其实就是排队,先进去的先出来,大家可以想一下咱们前端的事件循环机制,由于js是单线程的,所以当有同步异步问题就得有一定的规则来判定让哪个先执行,哪个后执行。规则就是同步先执行,异步后执行,异步又分微任务和宏任务,微任务先执行,宏任务再执行等等,大家可以自行查阅。如何用js来实现一个队列呢?很简单,就是用数组的方法,排队:进入:push,出来:shift;
栈
特点:先进的后出来,只能从尾部添加元素,也只能从尾部取元素,对应的数组方法:pop和push。
具体应用请看后续,我会一直更新前端所需算法内容,我们一起提高,遇到疑问,留言,我一定会看,文章有哪里有问题,评论哈,毕竟我也是个垃圾