前端算法能力提高(数组,队列,栈)

马上开学就要大四了,也就意味着要面临就业了。接触前端东西也已经有一年多了,做了很多,但是在面试的过程中,总免不了被问算法,之前也一直不重视,认为目前开发也用不着还不如多问我点原生js,现在观念有一些转变,行业这么卷,肯定得有一些手段筛人,而算法也算是众多公司常用的手段吧,这个也能决定你的base,所以,人家既然要求,那我们也就不要反感。尽可能的提高自己,不管用不用,只要你要,我就有。

先从最基础的数据结构开始:
数组

一般我们定义数组:
const arr = [1,3,5]

或者

 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) 

11
其实我们在使用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。
具体应用请看后续,我会一直更新前端所需算法内容,我们一起提高,遇到疑问,留言,我一定会看,文章有哪里有问题,评论哈,毕竟我也是个垃圾

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值