js入门(5)数组
数组
数组的定义和基本使用
数组的定义和相关信息
数组相关
- 用来存储一组相关的值
- 命名通常以Arr为后缀
- 他是非常重要的一种数据结构
数组定义
- 第一种
var arr =['A','B','C','D']; - 第二种
var arr = new Array('A','B','C','D');
这种相当于调用函数,所以用小括号即可 - 第三种
var arr = new Array(4);
定义了一个长度为4的空数组 - 数组每项都有下标
第一项是0
下标越界
- 会返回undefined,不会报错
- arr[-1]这里是错误的,但是js不会报错
数组的长度
- length
用arr.length可以输出长度
更改数组项
- 如果更改的数组项超过了长度,会创造这一项
数组的遍历
- 数组最大的优点就是遍历
数组类型的检测
- 用typeof检测数组得到的结果是object
- 我们可以用内置构造函数Array.isArray()方法来进行检测,会返回布尔值
数组的常用方法
数组的头尾操作
push()方法
- 在数组的末尾推入新项
- 要推入多项,可以用逗号分隔
- 调用push()方法后,数组会立即改变,不需要赋值
pop()方法
- 用来删除数组的最后一项
- 会返回被删除的项
- 无参数
- 输出55
unshift()方法
- 在数组头部插入新项
- 插入多项用逗号隔开
- 数组会立即改变不需要赋值
shift()方法
- 用来删除数组中下标为0 的数
- 会返回被删除的项
splice()方法
- 用于替换数组中的指定项
- 从下标为3开始的项开始2项,替换的项用逗号写在后面,可以超过2项
在指定位置插入新项
- 在下标为2之前插入这些新项
删除指定项
- arr.splice(2,3)
- 从下标为2的项开始删除3项,后面不跟新项即可
被删除的项会返回
- 被删除或者是被替换
- 有返回值
slice()方法
- 用于的得到子数组
- slice(a,b)截取的子数组从下标为a的项开始,到下标为b(不包括b)结束
- 不会改变原数组
- 没有b会截取到最后
- 参数可以为负数,表示倒数第几项
截取到倒数第一项但是不包括最后一项
join()和split()方法
- 数组的join()方法可以使数组转为字符串
- 字符串的split()方法可以使字符串转为数组
- join()的参数表示以什么字符作为连接符,如果留空则默认以逗号分隔,如同调用toString()方法
- split()的参数表示以什么字符拆分字符串,一般不能留空
- 字符串也可以使用方括号写下标的形式,访问某个字符,等价于charAt()方法
concat()方法
- 合并连接多个数组
- 会生成一个新的数组,原数组不会被改变
reverse()方法
- 用来将一个数组中的全部项顺序置反
- 会立刻改变数组值
- 把'ABCDEFG'全部调换顺序
可以连续打点.
indexOf()和includes方法
- indexOf()方法,搜索数组中的元素,并返回他所在的位置(下标),如果元素不存在,返回-1
- includes()方法,判断一个数组是否包含一个指定的值,返回布尔值
数组的排序
sort()
数组算法
遍历相关算法
- 求数组中每一项的总和和平均数
- 求数组的最大值和最小值
<script>
/*求数组的总和,平均值*/
/*求最大值和最小值*/
var Arr=[1,2,65,78,65,43,76,4,85,8,0,53,35];
var sum=0;
var max,min;
max=Arr[0];
min=Arr[0];
for (var i=0;i<Arr.length;i++){
sum +=Arr[i];
if (max<Arr[i]){
max=Arr[i];
}else if(min>Arr[i]){
min=Arr[i];
}
}
alert(sum);
var pj;
pj=sum/(Arr.length-1);
</script>
数组去重和随机样本
- 去掉数组中的重复项
准备一个空数组,遍历原数组,如果遍历到的项不在结果数组中,则推入结果数组
/*数组去重*/
var qcArr=[1,1,1,2,2,2,3,3,4,4,4,4,5,6,7,7,8];
/*创建一个新数组*/
var newArr=[];
/*通过includes()判断是否拥有这个元素
* 通过push()方法在数组的末尾推入新项*/
for (var i=0;i<qcArr.length;i++){
if(!newArr.includes(qcArr[i])){
newArr.push(qcArr[i]);
}
- 随机从原数组中取3项
准备一个空数组,遍历原数组,随机选择一项,推入结果数组,并且将这项删除
/*选择随机数*/
var sjsArr=[1,2,3,45,6,7,8,9,0,-12];
var new1Arr=[];
for (var i=0;i<3;i++){
/*随机一项的下标并删除*/
var n=parseInt(Math.random(sjsArr.length));
new1Arr.push(sjsArr[n]);
/*删除这个随机数*/
arr.splice(n,1);
}
冒泡排序
从最后一个数字一个一个往前面比较
n个数字需要比较n-1趟,比较次数为n(n-1)/2次
var mpArr=[1,2,3,45,6,7,8,9,0,-12];
var number;
/*需要比较长度-1项,因为是跟前一项来比较*/
for (var i=1;i<mpArr.length;i++){
for (var j=mpArr.length-1;j>=i;j--){
/*建一个新变量用于交换两个数*/
if (mpArr[j]<mpArr[j-1]){
number=mpArr[j];
mpArr[j]=mpArr[j-1];
mpArr[j-1]=number;
}
}
}
二维数组
- 以数组作为数组元素的数组,就是二维数组
- 可以看作是矩阵
- 每一个[],就表示一行
- 长度是行数,并不是全部
- 遍历需要用for循环的嵌套来完成
认识引用类型
基本类型和引用类型
- 基本类型:number ,boolean ,string ,undefined ,null
- 引用类型:array ,object ,function ,regexp...
- 基本类型会克隆值,引用类型则不会
- 基本类型进行相等判断,会比较值
- 引用类型会比较地址
深克隆和浅克隆
浅克隆:
只克隆数组的第一层,如果是多维数组,或者数组的项时其他引用类型的值,不克隆其他层
深克隆:
克隆数组所有层,需要用到递归
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了