《JS数组》

99 阅读4分钟

数组是什么

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

数组的方法

  • 创建一个数组
    新建
    let arr=[1,2,3] let arr=new Array(1,2,3)
    let arr=new Array(3) 的意思是数组长度为3
  • 转化:
    let arr=‘1,2,3’ arr.split(‘,’) 就可以把字符串转化为数组
    let arr=‘123’ arr.split(‘’)
    Array.from(‘123’) 新语法 可以直接将括号里的内容转换为数组 但是在一些情况下 可能会需要有 下标 length才能转换
  • 伪数组
    let divList =document.querySelector(‘div’) 这句话的意思是获取div 以数组的形式 但是是一个伪数组 没有数组的原型 可以通过Arrat.from来把他变成数组
    伪数组的原型链中并没有数组的原型
    总结:没有数组共用属性的数组就是伪数组
  • 创建一个数组(续)
    合并两个数组得到一个新数组 但是原来的数组并不会消失或者改变
    arr1.concat(arr2)
  • 截取一个数组的一部分
    arr1.slice(1)从第二个元素开始 arr1.slice(0)全部截取 截取是包括括号里的那个
    slice(0)算是拷贝 JS只提供浅拷贝 不提供深拷贝

删除数组中的元素

  1. delete arr[0]
    arr这个的第一个会变成 empty 但是数组的长度还是三 数组的长度没有变
    如果一个数组中全是empty 那么这个数组叫稀疏数组
  2. 直接改length可以删元素
    会把数组长度以外的数组全部删掉
    重要:不要随便改length
  3. 建议使用的方法
    删除头部的元素
    arr.shift()arr被修改 并返回被删元素 长度也会改变
    删除尾部的元素
    arr.pop() arr被修改 并返回删除元素
    删除中间的元素
    arr.splice(index,1)删除index的一个元素 1就是删一个 2就是删两个
    arr。splice(index,1,‘x‘) 并在删除位置添加一个’x‘
    arr.splice(index,1,‘x‘,’y‘)并在删除位置添加’x‘,’y‘
    index代表数字下标 删除包括当前数字下标

遍历数组

  1. for循环遍历数组
  2. 也可以用forEach/map等原型上的函数
    arr.forEach(function(xxx,yyy){
    console.log(${yyy}:${xxx})}) 代表打印出 数字下表:数字 xxx是值 yyy是属性名
  • for循环和each的区别就是 for循环里有break和continue 而forEach没有 他只是个函数
    for循环可以在某一个下标时停止 if break 而forEach不可以
    for循环是一个关键字 块级作用域 forEach是函数作用域

查看数组

  • 查看单个属性
    中括号下标就行
  • 读取不存在的下标 就是undefined
  • 查看单个属性(续)
    查找某个元素是否在数组里
    arr.indeOf(item) 存在返回索引 否则返回-1
    使用条件查找元素
    arr.find(item=>item%2===0) 找第一个偶数
    使用条件查找元素的索引
    arr.findIndex(item=>item%2===0) 找第一个偶数的索引

增加数组中的元素

在尾部加元素
arr.push(newItem) 修改arr,返回新长度
arr.push(item1,item2) 修改arr 返回新长度

在头部加元素
arr.unshift(newItem) 修改arr 返回新长度
arr.unshift(item1,item2) 修改arr 返回新长度

在中间添加元素
arr.splice(index,0,‘x’)在index处插入‘x’ 中间的0代表一个也不删除
arr.splice(index,0,‘x’,‘y’)

修改数组中的元素

可以直接用arr【下标】来修改
也可以用splice把那个元素删掉 换别的

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

反转一个字符串
先用split(‘’)空字符串 把它转换为数组 然后再反转数组 然后再用join(‘’)合并起来

arr.sort() 自动把乱序变为从小到大 可以在括号里写函数 return1 -1 0 来确定如何排序
会改变数组自身
以下两种写法都可

数组变换

以下三个都不会改变原数组
map
n变n
arr.map(x=>x*x)
就可以把一个数组里的内容变成平方

filter
n变少
arr.filter(x=>x%2==0 ? true : false) 筛选偶数 后面的判断可以不要 也可以打出来

reduce
接受四个参数

  1. Accumulator (acc) (累计器)
  2. Current Value (cur) (当前值)
  3. Current Index (idx) (当前索引)
  4. Source Array (src) (源数组)

n变1
arr.reduce((sum,x)=>{return sum+x},0)
x就是arr[i] 然后0是sum的初始值