js数组解析

438 阅读3分钟

js的数组不是典型数组

典型的数组有以下特征

  • 元素的数据类型相同
  • 使用连续的内存储存
  • 通过数字下标获取元素

但是js的数组不是这样

  • 元素的数据类型可以不同
  • 内存不一定是连续的(对象是随机存储的)
  • 不是通过数字下标,而是通过字符串下标,这就意味着数组可以由任意的Key

如果创建数组

通过新创建的方式

  • 使用new Array()方法,如果参数只有1个,代表新建数组的长度,并且内容为空;如果参数为1个以上,则参数代表新创建数组的元素;

  • 简便方式

转化方式

  • 字符串通过split()可转化为数组

  • Array.from(参数) 参数必须为字符串,可以为空字符串

合并数组可得到新数组,使用concat()方法

截取数组的一部分也可以得到新的数组,使用slice()方法,如果slice方法不传参数,可以对数组进行浅拷贝

删除数组元素

数组的本质是对象,那我们能不能使用删除对象的方法呢?答案是不行,请看下图

如果直接更改数组的length属性能删除吗?答案是可以,但是我们不能随便更改数组的length

正规的删除数组的元素的方法

删除头部的元素shift(),此方法会改变原来数组,返回被删除的元素

删除尾部的元素pop(),此方法会改变原来数组,返回被删除的元素

删除中间的元素array.splice(start[, deleteCount[, item1[, item2[, ...]]]]) start为开始的位置,从0开始;deleteCount为删除的个数,可选参数,item1,item2为在删除的位置添加的元素,可选;方法会改变原来数组,返回被删除的元素

查看数组属性名与值

如果要查看对象的属性名与值,我们可以使用for in ,但是在数组中,要使用for循环,因为for in 会查看到非数字属性名;

for循环与forEach的区别是什么?

for 循环可根据条件使用break终止循环,而forEach不可以,必须全部遍历一遍

查看单个属性

查找某个元素是否在数组里面

arr.indexOf(el); 存在返回索引,否则返回-1

使用条件查找元素

arr.find(),一旦find发现符合条件,就终止循环,所以只会有一个元素返回

使用条件查找元素的索引

arr.findIndex()查找符合条件的第一个元素的索引

添加元素

在尾部添加元素,push方法,返回新长度,修改原来数组

arr.push(ele1,ele2)

在头部添加元素,unshift方法,返回新长度,修改原来数组

arr.unshift(ele1,ele2)

在中间添加元素

arr.splice(index,0.el1,el2) 在index处插入el1,el2

数组反转

arr.reverse() // 修改原数组

自定义顺序

arr.sort((a,b) => a -b )

数组的变换

  • map()方法
  • filter()方法
  • reduce()方法