JS 数组对象基本用法
数组究竟是什么
- js 其实没有真正的数组,而使用对象模拟的数组
- 典型的数组
- 元素的类型相同
- 使用连续的内存存储
- 通过数字下标获取元素
- JS 的数组
- 元素的类型可以不同
- 内存不一定是连续的(对象是随机存储的)
- 不能通过数字下标获取,而是通过字符串获取
- 这意味着数组可以有任意 KEY,比如
let a = [1,2,3] a['xxx']=xxx
在 JS 中是完全合法的
- 这意味着数组可以有任意 KEY,比如
- 如何创建一个数组
- 新建
let a = [1,2,3]
let a = new Array(1,2,3)
let a = new Array(3)
- 转化
let a = '1,2,3'.spite(',')
let a = '123'.spite()
Array.from('123')
- 伪数组
let divlist =document.queryselctorAll('div')
- 伪数组的原型链中并没有数组的原型,需要进行转化(使用 Array.from())才能使用数组的方法
- 合并两个数组得到一个新数组
- arr1.concat(arr4)
- 截取数组的一部分成为新数组
- Arr.slice(1)//从第二个元素开始
- arr.slice(0)//全部截取,是拷贝的方法
- 注意,JS 只提供浅拷贝
- 新建
数组元素的删除
- 可以使用对象一样的方法
delete arr[0]
,但是数组的长度不会改变,会产生一个稀疏数组,但是不推荐这样做 - 修改 length 可以直接删除长度后面的元素,也不推荐这样做
- 推荐的做法
- 删除第一个元素:
arr.shift() //arr被修改,返回第一个元素
- 删除最后一个元素:
arr.pop()//arr被修改,返回最后一个元素
- 删除中间的元素:
arr.splice(index,1)//删除index的第一个元素
arr.splice(index,1,'x')//删除index的第一个元素并在此位置添加'x'
arr.splice(index,1,'x','y')//删除index的第一个元素并在此位置添加'x','y'
- 此方法会修改原数组
- 删除第一个元素:
遍历数组
- 使用 for 循环
for(let i = 0;i < arr.length;i++ ){...}
- 使用 forEach
arr.forEach(function(item,index,arr){...})
- 和 for 的对比
- 首先:for 循环里面是有 break,continue 等方法的,forEach 是没有的
- 其次:for 是一个关键字,里面的是一个块作用域,而 forEach 是一个函数,里面的是一个函数作用域
- 查看单个属性
- 使用下表读取,a[1],注意此时 1 会在 JS 内部被强制转化成字符串形式
- 索引越界问题
- 读取了 length 的属性就会越界,因为 undefine 不能使用 testing()方法,所以此时会报错,一定要注意这一点
- 索引越界问题
- 查看单个元素是否存在
arr.indexOf(item) //存在返回index,不存在返回-1
- 使用条件查找元素
arr.find(item=>item%2 === 0)//找第一个偶数
- 使用条件查找元素的索引
arr.findindex(item=>item%2===0))//找第一个2偶数的索引
- 使用下表读取,a[1],注意此时 1 会在 JS 内部被强制转化成字符串形式
数组元素的增加
- 在尾部添加元素
- 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’
- arr.splice(index,0,’x’ ,’y’)// 在 index 除插入’x’,’y’
反转顺序
- 反转数组
- arr.reverse() //会修改原数组
- 反转一个字符串
string.split(' ').reverse().join(' ')
- 反转一个字符串
- 自定义顺序
- Arr.sort((a,b)=>a-b)
- arr.reverse() //会修改原数组
数组的变换
- map() n 变 n
- filter() n 变少
- reduce() n 变 1
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!