JS 数组

187 阅读2分钟

一、JS数组介绍

  1. JS其实没有真正的数组,只是用对象模拟数组
  2. JS的数组不是典型数组,典型的数组元素的数据类型相同,使用连续的内存存储,通过数字下标获取元素,但 JS 的数组不这样:
  • 元素的数据类型可以不同
  • 内存不一定是连续的(对象是随机存储的)
  • 不能通过数字下标,而是通过字符串下标这意味着数组可以有任何 key
比如
let arr=[1,2,3]
arr['xx']=1

二、创建数组

创建一个数组·

  1. 新建
let arr=[1,2,3]
let arr= new Array(1,2,3)
let arr = new Array(3)
  1. 转化
let arr='1,2,3'split(',')  (',')表示用,分隔字符串
let arr='123'split('') 
Array.from('123')
  1. 伪数组
let divList=document.querySelectorAll('div')
  • 伪数组的原型链中并没有数组的原型,没有数组共用属性的「数组」就是伪数组
  1. 合并两个数组,得到新数组arrl.concat(ar2)

  2. 截取一个数组的一部分

arr1.slice(1//从第二个元素开始
arr1.slice(0//全部截取
  • 注意,JS只提供浅拷贝

三、删除数组中的元素

  1. 跟对象一样(不推荐)
letarr=['a','b','c]
delete arr['0']
arr//[empty,'b,'c]
  • 数组的长度并没有变
  • 稀疏数组 2.如果直接改length也可以删元素(不推荐)
let arr=[1,2,3,4,5];
arrlength=1 
  • 重要: 不要随便改length
  1. 删除头部的元素
  • ar.shift()//arr被修改,并返回被删元素
  1. 删除尾部的元素
  • arr.pop()//arr被修改,并返回被删元素
  1. 删除中间的元素
  • arr.splice(index,1)//删除index的一个元素
  • arr.splice(index,1,x')//并在删除位置添加'x
  • arr.splice(index,1,x,'y)//并在删除位置添加'x''y'

四、查看所有元素

  1. 查看所有属性名
let arr=[1,2,3,4,5];arrx='xxx'
Object.keys(arr)
for(et key in arn{consolelog('Stkey}:Sfarrkey])}
  1. 查看数字((字符串)属性名和值
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是函数,无法中途结束。
  1. 查看单个属性
  • 跟对象一样
let arr=[11,222,333]
arr[0]
  • 索引越界
arr[arr.length]=== undefined
arr[-1]=== undefined
  1. 查找某个元素是否在数组里
  • arr.indexof(item)//存在返回索引,否则返回-1
  1. 使用条件查找元素
  • arr.find(item>item %2===0)//找第一个偶数
  1. 使用条件查找元素的索引
  • arrfindIndex(item=>item %2===0)//找第一个偶数的索引

五、增加数组中的元素

  1. 在尾部加元素
arr.push(newltem)//修改arr,返回新长度
arr.push(iteml,item2)//修改arr,返回新长度
  1. 在头部加元素
arr.unshift(newltem)//修改arr,返回新长度
arr.unshift(item1,item2)//修改arr,返回新长度
  1. 在中间添加元素
arr.splice(index0'x')//在index处插入'x'
arr.splice(index,0,'x'y')

六、修改数组元素

  1. 反转顺序
  • arr.reverse()//修改原数组
  1. 自定义顺序
  • arr.sort((a,b)=>a-b)

数组变换

image.png

  • map n变n
  • filter n变少
  • reduce n变1