一、JS数组介绍
- JS其实没有真正的数组,只是用对象模拟数组
- JS的数组不是典型数组,典型的数组元素的数据类型相同,使用连续的内存存储,通过数字下标获取元素,但 JS 的数组不这样:
- 元素的数据类型可以不同
- 内存不一定是连续的(对象是随机存储的)
- 不能通过数字下标,而是通过字符串下标这意味着数组可以有任何 key
比如
let arr=[1,2,3]
arr['xx']=1
二、创建数组
创建一个数组·
- 新建
let arr=[1,2,3]
let arr= new Array(1,2,3)
let arr = new Array(3)
- 转化
let arr='1,2,3'split(',') (',')表示用,分隔字符串
let arr='123'split('')
Array.from('123')
- 伪数组
let divList=document.querySelectorAll('div')
- 伪数组的原型链中并没有数组的原型,没有数组共用属性的「数组」就是伪数组
-
合并两个数组,得到新数组
arrl.concat(ar2) -
截取一个数组的一部分
arr1.slice(1)//从第二个元素开始
arr1.slice(0)//全部截取
- 注意,JS只提供浅拷贝
三、删除数组中的元素
- 跟对象一样(不推荐)
letarr=['a','b','c]
delete arr['0']
arr//[empty,'b,'c]
- 数组的长度并没有变
- 稀疏数组 2.如果直接改length也可以删元素(不推荐)
let arr=[1,2,3,4,5];
arrlength=1
- 重要: 不要随便改length
- 删除头部的元素
ar.shift()//arr被修改,并返回被删元素
- 删除尾部的元素
arr.pop()//arr被修改,并返回被删元素
- 删除中间的元素
arr.splice(index,1)//删除index的一个元素arr.splice(index,1,x')//并在删除位置添加'xarr.splice(index,1,x,'y)//并在删除位置添加'x''y'
四、查看所有元素
- 查看所有属性名
let arr=[1,2,3,4,5];arrx='xxx'
Object.keys(arr)
for(et key in arn{consolelog('Stkey}:Sfarrkey])}
- 查看数字((字符串)属性名和值
for(let i=0; i<arr.length;i++){
console.log(`${i} : ${arr[i]}`)
}
- 你要自己让i从0增长到 length-1
arr.forEach(function(item,index){
console.log(`${index}: ${item}`)
})
- 也可以用 forEach/map 等原型上的函数
- 两种方法的区别:for循环是关键字,支持break,continue等,相对forEach功能更强大,forEach是函数,无法中途结束。
- 查看单个属性
- 跟对象一样
let arr=[11,222,333]
arr[0]
- 索引越界
arr[arr.length]=== undefined
arr[-1]=== undefined
- 查找某个元素是否在数组里
arr.indexof(item)//存在返回索引,否则返回-1
- 使用条件查找元素
arr.find(item>item %2===0)//找第一个偶数
- 使用条件查找元素的索引
arrfindIndex(item=>item %2===0)//找第一个偶数的索引
五、增加数组中的元素
- 在尾部加元素
arr.push(newltem)//修改arr,返回新长度
arr.push(iteml,item2)//修改arr,返回新长度
- 在头部加元素
arr.unshift(newltem)//修改arr,返回新长度
arr.unshift(item1,item2)//修改arr,返回新长度
- 在中间添加元素
arr.splice(index,0,'x')//在index处插入'x'
arr.splice(index,0,'x'y')
六、修改数组元素
- 反转顺序
arr.reverse()//修改原数组
- 自定义顺序
arr.sort((a,b)=>a-b)
数组变换
mapn变nfiltern变少reducen变1