数组是JS数据类型中的一种,也是一种特殊的对象,数组的下标也是字符串。
数组
创建数组
let arr=[1,2,3]
// 数组参数有多个,括号里面表示数组的元素;如果数组参数有一个,就表示数组的长度
// 元素为1,2,3
let arr=new Array(1,2,3)
// 数组长度为3
let arr=new Array(3)
字符串转化成数组
// 第一种
let arr='1,2,3'.split(',');
// 第二种,后面是空字符串
let arr='123'.split('')
//第三种,这种方法可以把伪数组变成数组
Array.from('123')
伪数组
伪数组,伪数组的原型链中没有数组的原型,它的原型直接指向对象的原型。因此,如果一个数组,没有数组的共用属性,比如push、pop等,它就是伪数组。
比如,let divList=document.querySelectorAll('div')
,这个divList就是伪数组。
合并数组
API是,arr1.concat(arr2)
,合并两个数组,得到一个新的数组。
截取数组
API是,arr.slice(0)
,截取数组的全部元素,常常用于拷贝。注意,JS原生方法只提供浅拷贝。
深拷贝和浅拷贝的区别
- 浅拷贝:浅拷贝只复制某个对象的地址,而不复制对象本身,新旧对象共享一块内存;
- 深拷贝:深拷贝会创造一个一模一样的对象,新旧对象不共享内存,修改新对象不会影响到原对象。
操作数组
删除元素
- 删除头部元素
// 原数组被修改,并且返回被删的元素
arr.shift()
- 删除尾部元素
// 原数组被修改,并且返回被删的元素
arr.pop()
- 删除中间的元素
// 删除index的一个元素
arr.splice(index,1)
//删除index的1个元素,添加x元素
arr.splice(index,1,'x')
//删除index的1个元素,添加x、y元素
arr.splice(index,1,'x','y')
查看元素
查看数组所有的元素
有三种方法:
- for in
- for循环
- forEach
分别怎么用?
for in
for(let i in arr){
console.log(arr[i])
}
for循环
for(let i=0;i<arr.length;i++){
console.log(arr[i])
}
forEach
let arr=[1,6,9]
arr.forEach(function(node,index){
console.log(node)
//结果是:数组中的每一项,1、6、9
console.log(index)
// index是数组的每一项的下标,从0开始
})
查看数组单个元素
API:arr[index]
查看某个元素是否在数组里
arr.indexOf(item)
// 存在就会返回索引,不存在就会返回-1
使用条件查询元素,例如找到第一个偶数
arr.find(item=>item%2===0)
使用条件查询元素的索引,例如找到一个偶数的索引
arr.findIndex(item=>item%2===0)
新增数组
在数组尾部添加元素:
arr.push()
在数组头部添加元素:
arr.unshift()
在中间添加元素:
arr.splice(index,0,'x')
反转数组的顺序:
// 修改了原数组
arr.reverse()
自定义顺序:
arr.sort(
// 可以写其他的形式函数
(a,b)=>{a-b}
)
数组变换
map
一一映射,新数组的元素个数不改变。
举例:
let arr=[1,2,3,4,5,6]
// 将数组的每一项变成平方
arr.map(item => item*item)
// 实现一一映射
filter
过滤,数量变少。
举例:
let arr=[1,2,3,4,5,6];
// 保留数组中的偶数
arr.filter(item => item%2===0? true : false)
// 缩写
arr.filter(item => item %2===0)