前端算法笔记-数据结构基础

前言

打算从0开始,用JavaScript刷题。
买了修言老师的小册子:前端算法与数据结构面试:底层逻辑解读与大厂真题训练
希望每天下班之后可以看一篇,争取早日上岸吧~

数据结构

我的想法:不同语言对于数据结构的实现有着不一样的特点。
之后的学习过程应该面向JavaScript的语言特性,针对前端的面试题来学习。

需要需要掌握的数据结构:

  • 数组
  • 队列
  • 链表

数组——重要的开箱即用数据类型

大多数的语言都天然地对数组有着原生的表达,JavaScript 亦然。这意味着我们可以对数组做到“开箱即用”,而不必自行模拟实现,非常方便。

初始化

在算法题中,推荐使用构造函数的方法初始化一个数组:

//推荐方法
const arr=new Array()
//该方法等价于
const arr = []
//使用构造函数创建数组的主要原因是,
//往往是因为我们有“创造指定长度的空数组”这样的需求。需要多长的数组,就给它传多大的参数.
const arr = new Array(7)

数组遍历

for方法

// 获取数组的长度
const len = arr.length
for(let i=0;i<len;i++) {
   
    // 输出数组的元素值,输出当前索引
    console.log(arr[i], i)
}

forEach方法

通过取 forEach 方法中传入函数的第一个入参和第二个入参,我们可以取到数组每个元素的值及其对应索引。
第一个入参:值
第二个入参:下标

arr.forEach((item, index)=> {
   
    // 输出数组的元素值,输出当前索引
    console.log(item, index)
})

map方法

map 方法在调用形式上与 forEach 无异。
区别在于 map 方法会根据你传入的函数逻辑对数组中每个元素进行处理、进而返回一个全新的数组
所以其实 map 做的事情不仅仅是遍历,而是在遍历的基础上“再加工”
当我们需要对数组内容做批量修改、同时修改的逻辑又高度一致时,就可以调用 map 来达到我们的目的:

const newArr = arr.map((item, index)=> {
   
    // 输出数组的元素值,输出当前索引
    console.log(item, index)
    // 在当前元素值的基础上加1
    return item+1
})
//这段代码就通过 map 来返回了一个全新的数组,数组中每个元素的值都是在其现有元素值的基础上+1后的结果。

二维数组的初始化

不可用的fill方法及其局限性

	const arr =(new Array(7)).fill([])
	//生成了7行0列的一个空二维数组

在这里插入图片描述

缺陷在于,当你想修改某个坑里的数组的值时:

arr[0][0] = 1

在这里插入图片描述

原因
当你给fill传递一个入参时,如果这个入参的类型是引用类型,那么 fill 在填充坑位时填充的其实就是入参的引用
也就是说看似我们给7个坑位各初始化了一个数组。这7个数组对应了同一个引用、指向的是同一块内存空间,它们本质上是同一个数组。 因此当你修改第0行第0个元素的值时,第1-6行的第0个元素的值也都会跟着发生改变。

正确的初始化方法

const len = arr.length
for(let i=
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
作为前端开发者,掌握数据结构算法是非常重要的。这可以帮助您更好地设计和实现前端应用程序,提高代码的效率和性能。以下是一些建议,可以帮助前端开发者掌握数据结构算法: 1. 学习基础知识:首先需要了解基本的数据结构算法,例如数组、链表、栈、队列、哈希表、排序算法、查找算法等等。可以通过阅读相关的书籍或在线教程来学习这些知识。 2. 刷题:练习是掌握数据结构算法的最好方法。可以刷LeetCode、Hackerrank等在线刷题网站上的算法题目。逐渐地,您可以尝试解决更复杂的问题,并更好地理解算法的实现和应用。 3. 实践项目:在实际项目中,可以运用已掌握的数据结构算法。例如,可以使用二叉树来构建导航栏,使用哈希表来处理用户输入,使用动态规划来解决复杂的问题等等。 4. 学习前端框架:学习流行的前端框架(如React,Vue等),它们提供了大量的优化技术和工具,可以帮助您更好地处理数据结构算法方面的问题。 5. 加入社区:参与在线社区、论坛或技术博客,了解前端开发者如何使用数据结构算法来解决实际问题。这也可以帮助您了解当前前端开发领域的最新趋势和技术。 总之,掌握数据结构算法需要坚持学习和不断练习。只有通过不断学习和实践,才能不断提高自己的技能和水平。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值