这是我参与2022首次更文挑战的第3天,活动详情查看:链接
一,数组简介
数组在JavaScript中也是一个对象,和普通对象功能类型,都是用来储存一些值。
不同的是,普通对象使用字符串作为属性名,而数组是用数字作为索引来操作元素。
可以看下图对比一下:
、
#数组的索引:从0开始的整数
数组的储存新能比普通对象要好,在开发中我们经常使用数组来储存数据。
二,创建数组对象
1,使用构造函数创建数组
var arr = new Array()
#使用typeof来检查一个数组时,会返回object
#向数组中添加属性
语法:数组[索引] = 值
例:arr[0] = 10
#读取数组元素
语法:数组[索引]
例:console.log(arr[0])
如果读取不存在的索引,返回undefined\
#获取数组的长度
语法:数组.length
元素个数,对于非连续性数组,使用length会获取到数组的做大索引+1
尽量不要创建非连续性的数组,如 arr[0] = 1 ; arr[8] = 'ppp'
修改length:如果修改的length大于原数组长度,则多出的部分为空
如果修改的length 小于原来数组的长度,则多出的元素被删除。
#向数组最后一个位置添加元素
语法:数组[数组.length] = 值
2,使用字面量方式创建数组
var arr = []
可以在创建数组时就指定数组中的元素
var arr = ['1',2,3,5,6]
等同于
var arr2 = new Array('1',2,3,5,6)
注意的是:使用构造函数创建数组时,也可以同时添加元素,将要添加的袁术作为构造函数参数传递,元素之间使用 英文逗号 , 分割
但是要注意的是,当构造函数参数只有一个,并且为整数时,会创建一个长度为该参数的数组
var arr2 = new Array(6)
// arr2 = [,,,,,]
数组中的元素可以是任意数据类型,例
var arr = ['hello',{},true,undefined,null,function(){},[]]
数组中还包含数组,这样的数组我们称之为二维数组,当然,内部数组在包含数组,我们以最里面一层为底,称为n维数组
var arr = [[],[],[]] //二维数组
var arr2 = [[[],[]],[]] //三维数组
三,常用的数组方法
var arr = ['张三','李四','赵无能']
- push方法
语法:数组.push(值)
向数组末尾添加一个或对个元素,并返回新的长度(作为返回值返回)
例子:
//一个
arr.push('孔明') //arr == ['张三','李四','赵无能','孔明']
//多个
arr.push('值1','值2'...) //arr == ['张三','李四','赵无能','值1','值2'...]
//返回长度
var len = arr.push('孔明') //len == 4
- pop方法
语法:数组.pop()
可以删除数组最后一个元素,并将被删除的元素作为返回值返回
var result = arr.pop() //result == 赵无能
- ****unshift方法
语法:数组.unshift('大脚')
//多个
数组.unshift('值1','值2',...)
向数组开头添加一个或者多个元素,并返回添加后的数组长度。
var result = arr.unshift('大脚') //result === 4
#注意:向前边插入元素,其他元素的索引会依次调整
arr.unshift('大脚','绣花')
// arr = ['大脚','绣花','张三','李四','赵无能'] 此时张三由索引0变为2
- shift()方法
语法: 数组.shift()
可以删除数组第一个元素,并将删除的元素作为返回值返回
arr.shift() //arr === ['李四','赵无能']
//返回值
var result = arr.shift() // 张三
- slice()方法
从某个已有数组返回选定元素,可以用来从数组中提取元素
语法:
数组.slice(0,1)
#参数
-参数1:截取开始的位置
-参数2:截取结束的位置
该方法不会改变原数组,而是将截取到的元素封装到一个新的数组返回
var newArr = arr.slice(0,1) // ['张三']
注意的是:新的数组中 包含开始索引的位置,不包含结束位置。
第二个参数可以不写,不写直接窃取开始索引往后数组的所有元素
索引传递负值的时候,则从后往前计算,比如: -1 == 倒数第一个 ; -2 ==倒数第二个
- splice()方法
可以用于删除数组中指定的元素,会影响原数组,会将指定元素从数组中删除,并将删除元素作为返回值返回。
var result = arr.splice(0,1) //原数组 -> ['李四','赵无能']
//result -> ['张三']
语法:
数组.splice(参数1,参数2,参数3,...)
#参数
-参数1:表示开始位置
-参数2:表示删除数量
-参数3及以后的参数:可以传递一些新的元素,这些元素将会自动插入开始位置索引前边
//例如:
var result = arr.splice(1,1,'王大拿','洗脚妹','孙悟空')
//原数组-> ['张三','王大拿','洗脚妹','孙悟空','赵无能']
// result -> ['李四']
- concat()方法
concat可以将连接两个数组,并将新的数组返回
该方法不会对原数组产生影响
var arr = ['后裔','猴子','哪吒','孙尚香']
var arr2 = ['吕布','刘备','张飞','盾山']
var arr3 = ['关羽','杨戬','马可波罗']
var resulr = arr.concat(arr2) // result = ['后裔','猴子','哪吒','孙尚香','吕布','刘备','张飞','盾山']
//连接多个
var result2 = arr.concat(arr2,arr3,'孙膑','牛魔')
// result2 = ['后裔','猴子','哪吒','孙尚香','吕布','刘备','张飞','盾山',.....]
- join方法
该方法可以将一个数组转换为一个字符串
该方法不会对原数组产生影响,而是将转换后的字符串作为结果返回
#在join()中可以指定一个字符串作为参数,这个字符串将会称为数组元素中的连接符,不指定默认为 ,
var arr = ['后裔','猴子','哪吒','孙尚香']
var result = arr.join() //result == '后裔,猴子,哪吒,孙尚香'
var result2= arr.join('-') //result == '后裔-猴子-哪吒-孙尚香'
- reverse()方法
该方法用来反转数组(前边的去后面,后面的去前面)
该方法会直接修改原数组
var arr = ['后裔','猴子','哪吒','孙尚香']
arr.reverse() //arr == ['孙尚香','哪吒','猴子',后裔']
- sort()方法
可以使用sort()方法来对数组进行排序
该方法会直接修改原数组,默认会按照Unicode编码排序
var arr = ['后裔','猴子','哪吒','孙尚香']
arr.sort() //arr = ['后裔', '哪吒', '孙尚香', '猴子']
即使对于纯数字的数组,也会按照Unicode编码排序
对数字进行排序时,需要自己指定排序规则
#我们可以在sort中添加一个回调函数,来指定排序规则。
# -回调函数需要定义两个形参
# -浏览器将会分别使用数组中的元素作为实参去调用回调函数
# -使用元素调用不确定,但肯定的是数组中a一定在b前边
# -浏览器会根据回调函数的返回值来决定元素的顺序
# - 如果返回一个大于0的值,则元素会交换位置
# - 如果返回一个小于0的值,则元素位置不变
# - 如果返回一个等于0的值,则认为两个元素相等,不交换位置
arr.sort(function(a,b){
// if(a >b ){
// return 1
// }else if (a<b){
retuen -1
// }else{
// return 0
// }
//或者 升序 a-b 降序 b-a
return a-b
})
四,数组遍历
遍历数组,就是将数组中所有元素都取出来
var arr = ['张三','王大拿','洗脚妹','孙悟空','赵无能']
for(var i = 0 ; i<arr.length; i++){
console.log(arr[i])
}
*forEach() 只支持ie8及以上浏览器
语法:数组.forEach(), 需要一个函数作为参数,像这种函数,由我们创建但是不是由我们调用,我们称为 ' 回调函数 '
arr.forEach(function(val,index){
console.log(val) // 值
})
数组中有几个元素,函数执行几次,每一次执行,浏览器将遍历到的元素以实参的形式传递进来,我们可以定义形参读取
浏览器会在回调函数中传递三个参数:
-第一个:当前正在遍历的元素
-第二个:索引,当前正在遍历的索引
-第三个:正在遍历的数组
#利用遍历,处理数组去重
var arr = [1,2,3,4,2,2,3,4,5,77,8,5,0,99]
for(var i = 0 ; i<arr.length; i++){
//获取当前元素后所有元素
for(var j = i+1; j<arr.length; j++){
//如果出现重复 则删除j对应的元素
if(arrp[j] == arr[i]){
arr.splice(j,1)
//当删除了当前j 所在元素后,后边元素自动补位,这个时候,不会在比较这个位置的元素,我们要在比较一次j所在的位置,所以
j--;
}
}
}