1、声明数组的方法
(1)字面量 var arr = [1,2,3]
(2)构造函数实例化 var arr = new Array()
(3)不用new关键字调用内置Array构造函数 var arr = Array() 这种方法不推荐
(4)还可以使用Array.from来创建新数组。
这四种实例的原型都是Array.prototype
2、js中,数组是在一种特别的对象,索引相当于key,每个元素是value值,访问机制和对象是一样的。
let obj ={
0: 1,
1: 2,
2: 3
},
arr = [1,2,3]
js中,' . '语法访问对象属性会转换成'[]'语法访问
obj.key => obj['key']
console.log(arr[3]) // => undefined 访问对象为定义的属性,返回undefined
稀松数组
有些元素没有值的数组叫稀松数组
[,1,3,,5,]数组最有一个逗号后面没有值的话,不会作为empty算进数组元素。
Array构造函数不能传空值,Array如果只接受了一个number参数,则代表生成该长度数组,元素都是empty,如果传无效数字,则会报错,如果传其他类型的参数,则以这些参数作为数组元素创建数组
let arr = new Array (5) // => [empty * 5]
3、数组常用方法
A,添加数组元素的方法,具有通用性,可用于具有length属性的对象如类数组。
(1)push,将不固定数量元素添加到数组末尾,改变数组本身,返回改变后数组的length
(2)unshift,将不固定数量元素添加到数组开头,改变数组本身,返回改变后数组的length
//实现自己的数组push方法
//第一种写法,给后面索引添加value
Array.prototype.myPush = function(){
let formerLength = this.length
for(var i = 0; i < arguments.length; i++){
this[formerLength + i] = arguments[i]
}
}
第二种写法,利用数组length随时改变的行为,直接给末尾添加元素
Array.prototype.myPush = function(){
for(var i = 0; i < arguments.length; i++){
this[this.length] = arguments[i]
}
return this.length
}
let arr = [1,2,3]
arr.myPush(5,6,7)
B,切头、切尾的方法
共同特点:具有通用性,根据length属性来判断数组第一或最后一位元素,所以可以通过call或apply,对类数组使用这个方法。如果数组length为0,则返回undefined。返回去除的元素。没有参数
(1)pop,去除数组的尾巴,最后一个元素
(2)shift,去除数组的头部,第一个元素
C,splice
具有通用性,通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。
start:第一个参数,指明修改的开始位置。如果大于数组本身长度,从数组末尾开始添加内容。如果是负值,则从数组末尾开始指定开始位置(等于 arr.length + n),如果负值的绝对值大于数组长度,删除开始位置为第0项。
deleteCount:说明要删除的元素个数。
如果被省略,或者大于start后元素的总数,则删除后面所有元素。
item1,item2…可选
说明要添加的元素。
返回值:如果删除了元素,则以数组形式返回被修改的内容,如果没有删除元素则返回空数组。
let arr = [1,2,3,4,5,6]
//删除元素
arr.splice(1,1) // => [1,3,4,5,6]
//替换元素
arr.splice(1,1,'2') // => [1, '2', 3, 4, 5, 6]
//添加
arr.splice(1,0,'9') // => [1,'9',2,3,4,5,6] 是在元素之前添加,注意下标
// start也可以为负值
arr.splice(-1,0,'6') // => [1,2,3,4,5,'6',6]
写一个判断开始位置的方法
function spliceStartIndex(arr,start){
let index = 0;
return index += ( start >=0 ? start : arr.length + start )
}
D、sort函数
sort函数,默认排序顺序是在将元素转换为字符串再根据对位数值的ASCII码来排序,原数组已改变。返回值为改变后的数组。
let arr = [22,3,57,8]
arr.sort()
console.log(arr) // => [22,3,57,8]
sort可以接收一个函数参数,函数有两个形参分别为排序的两个值。
arr.sort((a,b)=>{
//如果返回正值,a排在b前面
//如果返回负值,a排在b后面
//如果返回零,位置不调整。
return a - b
})
随机排序
利用Math.random() 产生0-1之间的数
let arr =[1,3,4,5,7,4,32]
arr.sort((a,b)=>{
let random = Math.random()
return radom - 0.5
})
E、reverse颠倒数组元素顺序
上述方法都是会改变数组本身的方法。