arr.shift()
console.log(arr) // [‘Lily’,‘William’,‘Cindy’]
arr.shift()
console.log(arr);// [‘William’,‘Cindy’]
从上面我们很容易可以看出 shift()
操作的复杂度为O(n) ,因为删除第一个元素后,我们必须将所有元素的索引移位或减量1
。
在特定索引处删除:
对于此操作,我们再次使用splice()
方法,不过这一次,我们只使用前两个参数,因为我们不打算在该索引处添加新元素。
let arr = [‘Apple’, ‘Orange’, ‘Pear’, ‘Banana’,‘Watermelon’]
arr.splice(2,1)
console.log(arr) // [‘Apple’, ‘Orange’, ‘Banana’,‘Watermelon’]
与用splice
添加元素操作类似,在此操作中,我们将递减或移动索引2
之后的元素索引,所以复杂度是O(n)。
查找元素:
查找只是访问数组的一个元素,我们可以通过使用方括号符号(例如: arr[4]
)来访问数组的元素。
你认为这个操作的复杂性是什么? 我们通过一个例子来演示一下:
let fruits = [‘Apple’, ‘Orange’, ‘Pear’]
前面我们已经看到,数组的所有元素都按顺序存储,并且始终分组在一起。 因此,如果执行fruits1,它将告诉计算机找到名为fruits
的数组并获取第二个元素(数组从索引0
开始)。
由于它们是按顺序存储的,因此计算机不必查看整个内存即可找到该元素,因为所有元素按顺序分组在一起,因此它可以直接在fruits
数组内部查看。 因此,数组中的查找操作的复杂度为 O(1)。
我们已经完成了对数组的基本操作,我们先来小结一下什么时候可以使用数组:
当你要执行像push()
(在末尾添加元素)和pop()
(从末尾删除元素)这样的操作时,数组是合适的,因为这些操作的复杂度是O(1)
。
除此之外,查找操作可以在数组中非常快地执行。
使用数组时,执行诸如在特定索引处或在开头添加/删除元素之类的操作可能会非常慢,因为它们的复杂度为O(n)。
对象
像数组一样,对象也是最常用的数据结构之一。 对象是一种哈希表,允许我们存储键值对,而不是像在数组中看到的那样将值存储在编号索引处。
定义对象的最简单方法是:
let obj1 = {}
事例:
let student = {
name: ‘Vivek’,
age: 13,
class: 8
}
来看一下上面的对象是如何存储在内存中的:
可以看到,对象的键-值对是随机存储的,不像数组中所有元素都存储在一起。这也是数组与对象的主要区别,在对象中,键-值对随机存储在内存中。
我们还看到有一个哈希函数(hash function)。 那么这个哈希函数做什么呢? 哈希函数从对象中获取每个键,并生成一个哈希值,然后将此哈希值转换为地址空间
,在该地址空间中存储键值对。
例如,如果我们向学生对象添加以下键值对:
student.rollNumber = 322
rollNumber
键通过哈希函数,然后转换为存储键和值的地址空间。现在我们已经对对象如何存储在内存有了基本的了解,让我们来执行一些操作。
添加
对于对象,我们没有单独的方法将元素添加到前面或后面,因为所有的键-值对都是随机存储的。只有一个操作是向对象添加一个新的键值对。
事例:
student.parentName = ‘Narendra Singh Bisht’
从上图中我们可以得出结论,这个操作的复杂性总是O(1),因为我们不需要改变任何索引或操作对象本身,我们可以直接添加一个键-值对,它被存储在一个随机的地址空间。
删除
与添加元素一样,对象的删除操作非常简单,复杂度为O(1)。因为,我们不必在删除时更改或操作对象。
delete student.parentName
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
最后
我可以将最近整理的前端面试题分享出来,其中包含HTML、CSS、JavaScript、服务端与网络、Vue、浏览器、数据结构与算法等等,还在持续整理更新中,希望大家都能找到心仪的工作。
CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
篇幅有限,仅展示部分截图:
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
学习成长!**](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算