26. JS 数组

26. JS 数组

数组是什么

数组是一种特殊的对象

JS其实没有真正的数组,只是用对象模拟数组

JS的数组不是典型数组

典型的数组

元素的数据类型相同

使用连续的内存存储

通过数字下标获取元素

但JS的数组不这样

元素的数据类型可以不同

内存不一定是连续的(对象是随机存储的)

不能通过数字下标,而是通过字符串下标

这意味着数组可以有任何key,比如let arr = [1,2,3] ,arr['xxx'] = 1

创建一个数组

新建

转化

如何有0,1,2,但是长度是错的,会得到什么样的数组。

伪数组

伪数组的原型链中并没有数组的原型,就是没有push这些,就是伪数组。

伪数组可以通过Array.from()来创建成数组。

合并两个数组,得到新数组

截取一个数组的一部分

arr1.slice(1)从第二个元素开始

arr1.slice(0)全部截取,经常用于浅拷贝/复制一个数组。

注意,JS只提供浅拷贝

增删改查

删元素

跟对象一样

如果直接改length可以删元素吗?

我X,居然可以

JS真神奇

重要:不要随便改length

删除头部的元素

删除尾部的元素

删除中间的元素

遍历数组

查看所有元素

查看所有属性名

查看数字(字符串)属性名和值

问:用for和forEach的区别是什么?

答:答题点,比如for能做到的,forEach做不到

大多数情况下,两者都一样,只有一种情况是不一样的,就是for里面有continuebreak,而forEach则没有。

forEach是一个槛

自己写forEach才能理解forEach

.forEach用for访问array的每一项

对每一项调用fn(array[i],i,array)

为什么要传入array呢?不为什么,规定如此。

.forEach返回的是undefined

查看单个属性

跟对象一样

索引越界

举例

报错:cannot read property 'toString' of undefined

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

使用条件查找元素

使用条件查找元素的索引

增加数组中的元素

不要使用arr[x]= xxx这种方式在数组上添加元素

在尾部加元素

在头部加元素

在中间添加元素

修改数组中的元素

反转顺序

如何反转字符串?

自定义顺序

只需要判断哪个大哪个小,排序的事情不用管

  • 0:一样大

  • 1:左边的大

  • -1:右边的大

数组变换

三个非常重要的数组变换函数.map, .filter, .reduce,都是返回新数组,不会改变原数组

Screen Shot 2021-12-03 at 2.51.11 AM

.map

n变n,会返回新数组,不会改变原数组

.filter

.reduce

reduce是最屌的函数,有了reduce就不需要map,map只是个语法糖而已。

有了reduce,也不需要filter

作业

第一题

把数字变成星期

第二题

找出所有大于60分的成绩

第三题

算出所有数字之和

面试题

数据变换

最后更新于

这有帮助吗?