一、一维数组的定义与基本使用
1.1、定义数组
数组:用来存储一组相关的值。其类型是Object类型。
定义三种方式:前两种的length值与其中定义的个数有关,第三种length值与初始创建的个数有关
<body> <script> // 方式一:直接进行赋值 或 [1, 2, 3, 4]; 都是可以的,在数组中你可以存放不同类型的数据 var arr = [1, 2, , , , 3, 4, , ,]; //这里没有赋值的位置默认都是undefined console.log(arr) console.log(arr.length); //9 //方式二:使用new Array()赋值方式 var arr1 = new Array(1, "123", true, undefined, null); console.log(arr1); console.log(arr1.length); //5 //方式三:使用new Array()定义指定长度,其中都没有赋值默认都是undefined var arr2 = new Array(5); console.log(arr2); console.log(arr2.length); //5 </script> </body
1.2、访问数组
当你定义了一个数组之后,可通过length属性获取到这个数组内元素的个数。
获取数组元素(访问越界情况)
访问方式使用数组名[下标],若是出现访问越界的情况并不会像java一样出现数组越界的问题,而是获取到undefined值,不会进行数组自动扩容!
<body> <script> var arr = [1, 2, 3]; console.log(arr[6]); console.log(arr); console.log(arr.length); </script> </body>
总结:获取数组的指定位置(越界情况)时会得到undefined值,数组不会扩容。
设置越界位置数组元素的值
若是一个数组只有3个元素,此时你为位置6设置一个值,那么数组本身会发生什么情况?
<body> <script> var arr = [1, 2, 3]; //增加了一个赋值操作(这个位置实际上是越界的) arr[6] = 123; console.log(arr[6]); console.log(arr); console.log(arr.length); </script> </body>
总结:若是给数组越界位置a进行赋值时,那么数组内部就会进行扩容操作,数组的总空间则为a个,中间空余的位置都使用undefined来填充。
1.3、数组遍历
普通for循环遍历
<script> var arr = [1, 2, 3]; //通过坐标来进行遍历 for (let i = 0; i < arr.length; i++) { console.log(arr[i] + " ") } </script>
1.4、数组类型的检测
数组的类型是Object,我们可以使用typeof关键字来进行获取数组的类型值,不过有个弊端:就是其他如类、对象使用typeof依旧也会得到object类型,所以一般不使用typeof去判断数组的类型!
推荐的方式:Array.isArray()
二、数组相关方法
2.1、push()、pop()、unshift()、shift()(头尾操作方法插入、弹出)
方法 |
功能 |
push() |
在尾部同时插入单个或多个新项。 |
pop() |
在尾部删除一个项。(有返回值) |
unshift() |
在头部插入单个或多个新项。 |
shift() |
在头部删除一个项。(有返回值) |
测试案例:
<script> var arr = [1, 2, 3]; //末尾操作: //push测试:数组末尾插入值 // arr.push(4); //允许在数组末尾插入一个数 // arr.push(5, 5);//允许在末尾插入多个数 // console.log(arr);//浏览器返回:Array(6) [ 1, 2, 3, 4, 5, 5 ] //pop测试:删除数组末尾值,并返回 // var popNum = arr.pop();//弹出数组末尾的一个值并返回 // console.log(popNum);//3 // console.log(arr);//Array [ 1, 2 ] //头部操作 //unshift测试:在数组头部插入值 // arr.unshift(0);//允许在头部插入一个值 // arr.unshift(-1, -1);//允许在头部插入多个值 // console.log(arr);//Array(6) [ -1, -1, 0, 1, 2, 3 ] //shift():数组头部弹出值 var shiftNum = arr.shift();//弹出数组头部的一个值并返回 console.log(shiftNum);//1 console.log(arr);//Array [ 2, 3 ] </script>
2.2、splice()与slice()(删除新增与选择范围)
splice():具有替换数组指定项、指定位置插入、删除指定项的功能
第一个参数是起始位置;第二个参数是删除的个数;第三个参数是一个数组形式(可以放置多个参数)。
方法含义是:从起始位置start开始,删除deleteCount个元素,删除后新增items数组中的元素。
splice():表示拼接,接合的意思,该方法会以数组形式返回被删除的项,若是没有删除的话返回空数组!
①替换数组指定项(含新增)
<script> var arr = [1, 2, 3, 4, 5, 6]; //需求:删除数组中的3、4并替换为9、9,再新增一个9 var delArr = arr.splice(2, 2, 9, 9, 9);//思路:从位置2开始删除2个并新增三个,第一个参数为2,第二个参数为2,后面参数为替换和新增的数 console.log(arr);//Array(7) [ 1, 2, 9, 9, 9, 5, 6 ] | 原来的数组 console.log(delArr);//Array(3) [ 3, 4, 5 ] | 调用方法返回的被删除元素形成的数组 </script>
②在指定位置新增指定项
<script> var arr = [1, 2, 3, 4, 5, 6]; //需求:在位置3中新增3个元素 var delArr = arr.splice(2, 0, 9, 9, 9);//思路:起始位置为2,删除元素为0,后面为要添加的元素 console.log(arr);//Array(9) [ 1, 2, 9, 9, 9, 3, 4, 5, 6 ] console.log(delArr);//Array [] | 空数组,由于没有要删除的元素所以返回空数组 </script>
③删除元素
<script> var arr = [1, 2, 3, 4, 5, 6]; //需求:删除3,4,5 var delArr = arr.splice(2, 3);//思路:元素为2的位置是1,要删除3个,无新增元素 console.log(arr);//Array(3) [ 1, 2, 6 ] console.log(delArr);//Array(3) [ 3, 4, 5 ] | 删除了三个,当然返回了三个元素组成的数组 </script>
slice():切片,获取指定范围中的数组元素以数组形式返回。
有三种形式来进行获取数组指定范围中的元素:
<script> var arr = [1, 2, 3, 4, 5, 6]; //方式一:获取数组范围中的元素,获取范围是[a,b) var sliceArr = arr.slice(1, 4); console.log(sliceArr);//Array(3) [ 2, 3, 4 ] //方式二:传入一个参数,返回该位置到最后的元素 var sliceArr1 = arr.slice(2); console.log(sliceArr1);//Array(3) [ 3, 4, 5 ] //方式三:两个参数中有负数(该负数表示从末尾开始),获取范围依旧是[a,b)。 var sliceArr2 = arr.slice(2, -1); console.log(sliceArr2);//Array(3) [ 3, 4, 5 ] </script>
2.3、join()与split()(数组与字符串互转方法)
join()方法:数组方法,可以将数组转为字符串。
split()方法:字符串方法,可将字符串转为数组。
join()方法
参数若为空,默认使用,号来进行连接数组中的元素,否则按照传入参数分隔符进行连接。
split()
参数若为空,则将整个字符串作为一个元素传入数组返回,否则按照传入参数分割符来分割字符串。
2.4、concat()(组合数组)
concat():数组的方法,可以将数组作为参数传入多个,返回合并后的数组,不会改变原数组。
<script> var arr = []; //调用arr数组对象的方法去连接其他两个数组 var conArr = arr.concat([1, 2, 3], [4, 5, 6]); console.log(conArr);//Array(6) [ 1, 2, 3, 4, 5, 6 ] | 合成返回的数组 console.log(arr);//Array [] | 原数组不会改变 </script>
2.5、reverse()(数组元素反转)
介绍与基本使用
reverse():将数组中的元素全部倒置。包含一个返回值即倒置后的数组,原数组也会进行倒置。
<script> var arr = [1, 2, 3, 4, 5, 6]; //反转数组中的元素 var reverArr = arr.reverse(); console.log(reverArr);//Array(6) [ 6, 5, 4, 3, 2, 1 ] | 返回的数组是倒序后 console.log(arr);//Array(6) [ 6, 5, 4, 3, 2, 1 ] | 原本的数组也是倒序 </script>
小案例:倒转字符串。
需求分析:对于字符串对象是没有reverse()方法的,那么我们可以将字符串先转为数组,使用数组进行倒转最后再转为字符串即可!
2.6、indexOf()与includes()(根据指定值来获取位置与是否包含元素)
indexOf():搜索数组中的元素,并返回它所在的位置,如果元素不存在,则返回-1。
includes():判断一个数组是否包含一个指定的值,返回布尔类型。
额外说明:这两个函数的过程中都没有隐式转换的情况