JS数据结构&算法学习——数组

简介: 数组是我们的老朋友了,一般情况,数组是用来存储同一数据类型的值,比如说一个数组内存有一系列对象形式,存储一系列字符串,一系列数值,等等

数组

认识数组

数组是我们的老朋友了,一般情况,数组是用来存储同一数据类型的值,比如说一个数组内存有一系列对象形式,存储一系列字符串,一系列数值,等等,JS中数组内可以存放不同类型的值,但是这种用法不推荐使用

除此之外数组的物理地址是相邻的,即在计算机内存储的地址。

创建数组

在JS创建数组常常使用new,我们也可以在创建的时候同时给数组赋值

var ary = new Array('1','2')
复制代码

当然还有最常用也是最推荐的创建方法

var ary = ['1','2']
复制代码

数组遍历

想在数组中查找一个元素或者想知道某个数组的长度我们最常用的就是对数组进行遍历

我们最常见的遍历大概就是使用for循环来对数组进行遍历

for (var i = 0; i < ary.length; i++) {
    alert(ary[i])
}
复制代码

但是JS中已经封装好了数组的一些迭代方法可以让我们更快捷得进行数组遍历

  1. forEach :无法在过程中终止,需要遍历每个元素来查找。
const arr = ['我','你','他']
   arr.forEach((item,index) => {
       if(item === '你') {
           console.log(index)
       }
   })
复制代码
  1. some:在找到对应项后可以通过retrun true 来终止some循环
const arr = ['我','你','他']
   arr.some((item,index) => {
       if(item === "你") {
           return true;
           //终止循环
       }
   })
复制代码
  1. every: 返回每一项是否满足判断条件的布尔值
const arr = [
       {id:1,name:'衣服',state:true},
       {id:2,name:'水果',state:true},
       {id:3,name:'电脑',state:true}
   ]
const result = arr.every(item => item.state == true)
复制代码

数组扩容

正常来讲常见语言的数组的容量不能自动改变的,我们需要进行扩容操作,在JS中扩容数组是比较简单的

ary.length = 10
复制代码

或者我们直接添加元素

ary[ary.length] = 9
复制代码

或者使用push方法在数组末尾添加元素

numbers.push(11)
复制代码

但是如果是比较底层的数组我们需要进行一些复杂的操作

1.webp.jpg

如果我们想扩容数组是需要讲一个数组copy到一个长度更长的数组内,链表和数组的区别就是如此,链表可以无限扩容,但是数组不能,数组的扩容是比较耗时的,报考删除和添加在内,因为本质上和扩容是一样的,但是查找相对于链表还是快的,直接使用下标就可以进行查找。

增删改获

  1. 增加元素:增加也就是添加元素,上文已提及到扩容,但是这里要提到如果我们想要在数组中间添加一个元素我们该怎么办呢?
var ary =['1','2','3','4']
复制代码
  1. 这里我们想要在2与3之间添加一个元素,我们该怎么做?
for (var i = ary.length+1; i = 3; i--) {
    ary[i] = ary[i-1]
}
ary[3] = '5'
复制代码
  1. 它的思路是这样的,我们可以使用一个for循环将2后面的元素位置逐次向后移动,这里注意的是从尾开始移动,在移动到3的时候停止移动并使用数组下标直接赋值,即可完成任意位置的添加插入
  2. 删除元素
    正常我们删除数组的一个元素的话比较常用的是JS提供的pop()来删除数组末尾的元素
var ary =['1','2','3','4']
ary.pop()
console.log(ary)
复制代码
  1. 但是如果我们想要删除数组内任意位置的元素的思路和在任意位置添加元素思路差不多
var delet = 2
for (var i = delet; i < ary.length; i++) {
    ary[i] = ary[i+1]
}
ary.pop()
复制代码
  1. 可以先声明你要删除的数组下标是多少,然后从删除目标的位置开始,让后面下标的元素覆盖掉前面的元素,最后使用pop()来完成任意位置的元素删除
  2. 改变数组任意位置元素和获取数组任意位置元素只需要利用下标就好了!
ary[1] = '3'
console.log(ary[0])



相关文章
|
2月前
|
机器学习/深度学习 算法 数据挖掘
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
|
2月前
|
存储 监控 JavaScript
基于布隆过滤器的 Node.js 算法在局域网电脑桌面监控设备快速校验中的应用研究
本文探讨了布隆过滤器在局域网电脑桌面监控中的应用,分析其高效空间利用率、快速查询性能及动态扩容优势,并设计了基于MAC地址的校验模型,提供Node.js实现代码,适用于设备准入控制与重复数据过滤场景。
78 0
|
9天前
|
运维 监控 JavaScript
基于 Node.js 图结构的局域网设备拓扑分析算法在局域网内监控软件中的应用研究
本文探讨图结构在局域网监控系统中的应用,通过Node.js实现设备拓扑建模、路径分析与故障定位,提升网络可视化、可追溯性与运维效率,结合模拟实验验证其高效性与准确性。
77 3
|
12天前
|
机器学习/深度学习 运维 算法
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
|
8月前
|
运维 监控 JavaScript
内网网管软件中基于 Node.js 的深度优先搜索算法剖析
内网网管软件在企业网络中不可或缺,涵盖设备管理、流量监控和安全防护。本文基于Node.js实现深度优先搜索(DFS)算法,解析其在网络拓扑遍历中的应用。通过DFS,可高效获取内网设备连接关系,助力故障排查与网络规划。代码示例展示了图结构的构建及DFS的具体实现,为内网管理提供技术支持。
129 11
|
5月前
|
监控 算法 JavaScript
基于 JavaScript 图算法的局域网网络访问控制模型构建及局域网禁止上网软件的技术实现路径研究
本文探讨局域网网络访问控制软件的技术框架,将其核心功能映射为图论模型,通过节点与边表示终端设备及访问关系。以JavaScript实现DFS算法,模拟访问权限判断,优化动态策略更新与多层级访问控制。结合流量监控数据,提升网络安全响应能力,为企业自主研发提供理论支持,推动智能化演进,助力数字化管理。
122 4
|
5月前
|
监控 算法 JavaScript
公司局域网管理视域下 Node.js 图算法的深度应用研究:拓扑结构建模与流量优化策略探析
本文探讨了图论算法在公司局域网管理中的应用,针对设备互联复杂、流量调度低效及安全监控困难等问题,提出基于图论的解决方案。通过节点与边建模局域网拓扑结构,利用DFS/BFS实现设备快速发现,Dijkstra算法优化流量路径,社区检测算法识别安全风险。结合WorkWin软件实例,展示了算法在设备管理、流量调度与安全监控中的价值,为智能化局域网管理提供了理论与实践指导。
133 3
|
7月前
|
算法 数据可视化 开发者
为什么要学习数据结构与算法
今天,我向大家介绍一门非常重要的课程——《数据结构与算法》。这门课不仅是计算机学科的核心,更是每一位开发者从“小白”迈向“高手”的必经之路。
为什么要学习数据结构与算法
|
7月前
|
算法 JavaScript 前端开发
Javascript常见算法详解
本文介绍了几种常见的JavaScript算法,包括排序、搜索、递归和图算法。每种算法都提供了详细的代码示例和解释。通过理解这些算法,你可以在实际项目中有效地解决各种数据处理和分析问题。
258 21
|
7月前
|
监控 算法 JavaScript
企业用网络监控软件中的 Node.js 深度优先搜索算法剖析
在数字化办公盛行的当下,企业对网络监控的需求呈显著增长态势。企业级网络监控软件作为维护网络安全、提高办公效率的关键工具,其重要性不言而喻。此类软件需要高效处理复杂的网络拓扑结构与海量网络数据,而算法与数据结构则构成了其核心支撑。本文将深入剖析深度优先搜索(DFS)算法在企业级网络监控软件中的应用,并通过 Node.js 代码示例进行详细阐释。
119 2

热门文章

最新文章