数组:
数组也是js中的一个数据类型,他是一个复杂(引用)数据类型,单词是Array在数组中也可以存储很多条数据
数组他是一个有序的集合。数据都是按照顺序排列的,每一条数据都拥有一个属于自己的编号创造数组的方式
方式一:字面量方式创建
创造一个空数组: var数组名=[]
//创造了一个名字为arr的变量,赋值为一个数组,但是这个数组中是没有数据的,他是一个空数组
//var arr = [ ]
//console.log( arr);
创造一个带有数据的数组: var数组名=[数据1,数据2,数据3...]
数组中可以存储很多不同类型的数据,但足我们一般建议最好存相同类型的数据
//创造一个带有数据的数组
//创造了一个名字叫做arr的变量,赋值为一个数组,这个数组中的数据为: 100,80,200,50
//var arr = [100, 80,200,50,"哈哈',‘呵呵呵' ,true]
//console.log( arr);
方式二:内置构造函数方式创建
创造一个空数组: var数组名= new Array ()
//内置构造函数方式创造空数组
//var arr = new Array ()
//console.log( arr);
创造带有数据的数组: var数组名= new Array(数据1,数据2,数据3...)
//内置构造函数方式创造带有数据的数组
// var arr = new Array ( 100,200,58, 90,65, 'hehe' )
// console.log(arr);
特殊情况:
如果用这种方式创建,小括号只写了一个数字,那么这个数字就不是数组的数据了,而变成数组的长度了
数组的长度:其实就是数组中有多少条数据
//内置构造函数的特殊情况﹐创造了一个长度为10的数组,但是每一个位置目前还没有数据,暂时用empty表示
// var arr = new Array ( 180)
// console.log(arr) ;
数组的下标
数组是一个有序的集合(数组中每一个数据都是按照顺序排好的,每一个数据都有他自己对应的编号)
这个编号我们一般就叫做下标、索引
索引(下标):从左到右从0开始依次+1
数组的基本操作
1.length属性:每一个数组都带有一个length属性,这个属性是一个读写属性,他的意思指的是数组的长度(也就是数组中有几条数据)
读写:读就是可获取,写就是可设置
读(获取):
语法:数组名.length
作用:可以获取数组的长度
写(设置)
语法:数组名.length = 数字
作用:可以去设置以下数组的长度
当设置的长度比原数组的长度小的时候:从数组的末尾开始删除数据,直到删除到符合设置的长度为止
当设置的长度比原数组的长度大的时候:多出来的位置用empty补齐
当设置的长度和原数组长度一致的时候:相当于没写设置
2.数组的索引(下标)
读(获取):
语法:数组名[索引]
作用:获取到改索引对应的数据,如果索引存在就是改索引位置的数据,如果改索引不存在结果就是undefined
写(设置):
语法: 数组名[索引] = 值
作用:
该索引如果存在就是修改这个索引对应的数据
该索引如果不存在:
如果索引写的刚好和数组的长度一致,那么就是在最后添加一条数据
如果索引设置的比length大:中间位置用empty补齐
3.遍历数组
遍历:从头到尾挨个访问一遍
遍历数组就是从头到尾访问一遍数组中的数据
发现:要想访问数组中的数据要借助于索引的,刚好索引规律是从左到右从0开始依次+1,所以是一组有规律的数字
刚好循环可以帮助我们产生出一组有规律的数字
所以我们遍历数组可以借助于循环来实现
怎么写呢?循环多少次呢?(核心思想:借助循环产生出数组对应的下标即可)
循环的起始值:从0开始(因为数组的索引是从0开始的)
循环的结束值:小于等于length-1或者写小于length
步长:依次+1
// 3.遍历数组
var arr = [100, 200, 300, 400, 500, 'hehe', '哈哈', '嘿嘿']
// for (var i = 0; i <= arr.length - 1; i++) {
// console.log(arr[i]);
// }
for (var i = 0; i < arr.length ; i++) {//<8
console.log(arr[i]);
}
数组的常用方法【改变原始数组】
1.push()
语法:数组名.push(数据)
作用:向数组的末尾追加一条数据
允许追加多条,数据之间逗号隔开,但是一般我们不会依次追加很多条.
返回值:追加之后数组的长度
2.pop()
语法:数组名.pop()===小括号中不需要写参数
作用:删除数组中的最后一条数据
返回值:被删除的数据
3.unshift()
语法:数组名.unshift(数据)
作用:从数组的最前面加入一条数据
返回值:加完之后数组的长度
4.shift()
语法:数组名.shift()
作用:删除数组最前面的一条数据
返回值:被删除的数据
5.reverse()
语法:数组名.reverse()====不需要写参数
作用:反转数组
返回值:就是反转之后的数组
是会改变原始数组的
6.sort()
语法:数组名.sort()
作用:对数组中的数据进行排序
返回值:就是排好序的数据
排序规则:
sort()中不写按照数据一位一位来阅读,一位一位进行排序
如果sort()中写了参数了,就可以按照我们写的规则去排序了
参数如何写:
在参数中需要写一个没有名字的函数:function(a,b){}
注意:小括号中形参随便写2个,名字随便起,{}中的逻辑:return a-b或者 return b-a都可
如果写的是a-b(第一个减去第二个)就是从小到大排序
如果写b-a(第二个减去第一个)就是从大到小排序
是会直接改变原始数组
7.splice()
语法:数组名.splice()
作用:从数组中截取部分内容,并可以选择是否要插入新的内容
返回值:一定会返回一个新的数组,数组中存储的就是截取出来的数据(如果没截取出来,就是一个空数组)
加参数的语法:
第一种:数组名.splice(开始索引,多少个)====从索引几开始截取,要截取多少个
第二种:数组名.splice(开始索引,多少个,插入的数据1,插入的数据2。。。)===从索引几开始截取,要截取多少个,并且截完之后可以再插入一些数据
从哪开始截取,就从哪开始插入
注意:
splice中尽量不要写负数
如果有第三个参数,第二个参数的数字不要忽略不写
如果只写一个参数:就是从这个数字的索引位置开始一直截取到最后
会改变原始数组。
数组的常用方法【不改变原始数组】
1.concat()
语法:数组名.concat(数据1,数据2。。。)
作用:进行数组的拼接,将原始数组和concat中的数据拼接成一个新的数组
返回值:拼接好的新数组
注意:如果concat中的数据是另外一个数组,那么会将这个数组中数据拆开,依次加入到新数组中。
2.join()
语法:数组名.join(连接符)
作用:使用连接符将数组中的数据连接成一个字符串
返回值:就是连接好的字符串
注意:
如果不写连接符,连接符默认是逗号
连接符要加引号
3.slice()
语法:数组名.slice(开始索引,结束索引)
作用:截取数组中的数据
返回值:一个新的数据,数组中就是截取出来的数据
注意:
1.包前不包后,截取的时候,结束位置的索引对应的数据是截取不下来的
2.如果第二个参数不写,一直截取到最后,从开始位置,截取完
3.如果一个参数都不写,就相当于从开始一直截取到最后,相当于把数组重新复制了一份出来
4.参数可以写负数,
一定要注意开始索引一般要比结束索引小
4.indexOf()
语法:数组名.indexOf(数据)
作用:从左到右找该数据第一次出现的位置(下标、索引)
返回值:该数据再数组中第一次出现的下标,如果找不到该数据,结果就是-1
传参数的第二种语法:数组名.indexOf(数据,开始索引)
作用:从开始索引位置完后找该数据再数组中对应的下标
5.lastIndexOf()
用法意思和indexOf是一样的
区别:lastInexOf是从右到左找的