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])



相关文章
|
21天前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
数据结构与算法系列学习之串的定义和基本操作、串的储存结构、基本操作的实现、朴素模式匹配算法、KMP算法等代码举例及图解说明;【含常见的报错问题及其对应的解决方法】你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
|
4天前
|
存储 JavaScript 前端开发
JavaScript学习第一章
本文档介绍了JavaScript的基础知识,包括其在网页中的作用、如何通过JavaScript动态设置HTML元素的CSS属性,以及JavaScript中的变量类型(`var`、`let`、`const`)和数据类型(基本数据类型与引用数据类型)。通过实例代码详细解释了JavaScript的核心概念,适合初学者入门学习。
|
18天前
|
机器学习/深度学习 人工智能 自然语言处理
【EMNLP2024】基于多轮课程学习的大语言模型蒸馏算法 TAPIR
阿里云人工智能平台 PAI 与复旦大学王鹏教授团队合作,在自然语言处理顶级会议 EMNLP 2024 上发表论文《Distilling Instruction-following Abilities of Large Language Models with Task-aware Curriculum Planning》。
|
21天前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习(8)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
21天前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
22天前
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
21天前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
22天前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之顺序表习题精讲【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找习题精讲等具体详解步骤以及举例说明
|
21天前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之王道第2.3章节之线性表精题汇总二(5)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
IKU达人之数据结构与算法系列学习×单双链表精题详解、数据结构、C++、排序算法、java 、动态规划 你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
19天前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
97 9
下一篇
无影云桌面